-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathGameApp.java
156 lines (131 loc) · 3.86 KB
/
GameApp.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
import gameCanvasUtil.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.JFrame;
/**
* アプリケーションのメイン部分(全てはここから始まる)
*
* スレッド、Event処理とかを一手に引き受けるクラス といいつつ、やることは基本他にたらいまわし。
*
* あと、ウインドウそのもののクラス
*/
public class GameApp extends JFrame implements WindowListener, Runnable
{
// / serialVersionUID
private static final long serialVersionUID = 1L;
// / 時間管理を行うオブジェクト
private FPSManager timer = null;
// / 画面そのもののオブジェクト
private AppCanvas canvas = null;
// / スレッド
private Thread th = null;
// falseになったらスレッドループを抜ける
private boolean thFlag = true;
/**
* ゲームモード
*
* @param args 引数
*/
public static void main(String[] args)
{
new GameApp();
}
/**
* コンストラクタ ウインドウの大きさ設定などを行ってます。
*/
private GameApp()
{
super("FrameTest");
timer = FPSManager.getInstance();
timer.init(GameCanvas.CONFIG_FPS);
GameCanvas.getInstance().init(this, new Game());
// リサイズ不可に
setResizable(false);
// 閉じるボタンを押した際の処理
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// リスナーに自身を登録
addWindowListener(this);
// コンポーネント追加
canvas = new AppCanvas();
add(this.canvas, BorderLayout.CENTER);
/* pack -> setPreferredSize の順に実行するとサイズ設定がうまくいく */
// コンポーネントのサイズに合わせてサイズを変更する
pack();
// コンポーネント追加後に、内側のサイズ(ウインドウ枠をのぞいたサイズ)からウインドウサイズを指定
setPreferredSize(new Dimension(GameCanvas.WIDTH, GameCanvas.HEIGHT));
// ウインドウを表示
setVisible(true);
th = new Thread(this);
th.start();
}
/**
* Windowが出現したとき呼び出される
*
* @param evt ウインドウのイベント
*/
public void windowOpened(WindowEvent evt)
{
}
/**
* Windowの×ボタンが押されたとき呼び出される
*
* @param evt ウインドウのイベント
*/
public void windowClosing(WindowEvent evt)
{
GameCanvas.getInstance().finalize();
thFlag = false;
}
/**
* Windowが閉じるとき呼び出される
*
* @param evt ウインドウのイベント
*/
public void windowClosed(WindowEvent evt)
{
}
/**
* Windowが最小化されたときに呼び出される
*
* @param evt ウインドウのイベント
*/
public void windowIconified(WindowEvent evt)
{
}
/**
* Windowが最小化された状態から戻ったときに呼び出される
*
* @param evt ウインドウのイベント
*/
public void windowDeiconified(WindowEvent evt)
{
}
/**
* Windowがアクティブになったとき呼び出される。
*
* @param evt ウインドウのイベント
*/
public void windowActivated(WindowEvent evt)
{
}
/**
* Windowがアクティブじゃなくなったときに呼び出される。
*
* @param evt ウインドウのイベント
*/
public void windowDeactivated(WindowEvent evt)
{
}
/**
* メインのスレッド
*/
public void run()
{
while (thFlag)
{
this.canvas.updateMessage();
this.canvas.drawMessage();
timer.Wait();
}
}
}