3.3.1.プログラムインスタンス (ActionGameクラス)
参考ソース(適当):ActionGame.java mainメソッド
プログラムインスタンスはJavaのmainメソッドを持つプログラムのエントリポイント
(プログラムの実行時の一番最初に実行されるメソッド)となるものです。
クラスはActionGameとなり、JFrameクラスより派生を行います。
このため、ActionGameクラスはアプリケーションウィンドウクラスとなります。
このウィンドウにより、キーボード入力の受付や、ウィンドウを閉じることによって、
プログラムの強制終了が行えるようになります。
処理 |
---|
起動パラメータの解析 |
使用方法の表示 |
バージョン情報の表示 |
フルスクリーンの診断 |
メインスクリーンブジェクトの生成と初期化 |
中核オブジェクトの初期化 |
中核オブジェクトのメインループの呼び出し |
処理 |
---|
キーボード入力のイベント処理 |
・起動パラメータの解析 (ArgsAnalyzerクラス)
参考ソース(適当):
ActionGame.java mainメソッド,
ArgsAnalyzer.java analyzeメソッド
起動パラメータの解析はプログラムの引数より渡される文字列を解析して、
ゲーム内部の変更可能パラメータのデータを求める処理となります。
この処理の実現にはArgsAnalyzerクラスを用いて実現を行います。
このクラスはパラメータ(キーワード=データ)の文字列集合を受け取り、解析結果を
自クラス内に持つメンバに設定します。
解析後はActionGameクラスがこの情報を元に、他のクラスにデータを設定します。
・使用方法の表示
起動パラメータの解析が完了し、この際 "help", "--help", "-h", "/?" が
指定されていた場合はヘルプを標準出力に出力します。
ヘルプを表示した場合は本プログラムを終了します。
・バージョン情報の表示
起動パラメータの解析が完了し、この際 "version", "--version", "-version", "-v" が
指定されていた場合はバージョン情報を標準出力に出力します。
バージョンを表示した場合は本プログラムを終了します。
・フルスクリーンの診断
起動パラメータの解析が完了し、この際 "diagnose=2" が
指定されていた場合はフルスクリーン画面の診断を行い、これを標準出力に出力します。
この診断はGraphicsEnvironmentクラスよりGraphicsDeviceクラス、DisplayModeクラスを取得し、
DisplayMode.getDisplayModesメソッドの結果が32bitカラー以上のものを標準出力します。
これは24bitカラー以下の色深度の場合、アフィン変換処理後のピクセルイメージが想定外に
なってしまう現象が発生したための仕様となります(良い対処法があれば16bitカラー以上の
サポートにしたいところです)。
診断を行った場合は本プログラムを終了します。
・メインスクリーンブジェクトの生成と初期化 (MainScreenクラス)
参考ソース(適当):
ActionGame.java mainメソッド,
MainScreen.java
起動パラメータの解析が完了し、パラメータの解析が完了したら、ゲームに必要なスクリーン(MainScreenクラス)を生成します。
MainScreenクラスはJPanelクラスより派生を行っており、これがゲームのメインスクリーンとなります。
MainScreenクラスは生成後にActionGameクラスのウィンドウ内に登録されます。
・中核オブジェクトの初期化 (Godクラス)
参考ソース(適当):
ActionGame.java mainメソッド,
God.java
プログラムインスタンスとメインスクリーンが生成されたら、いよいよゲーム上の構成情報を
初期化します。
Godクラスはフレームワーク上唯一に存在(ActionGameクラスにstaticクラスとして存在)し、
ゲーム上の中核となる情報を保持します。(保持する詳細情報は「3.4.中核 (Godクラス)」
の「初期化と必要オブジェクトの生成」を参照してください)
現時点で行われる初期化は前項のメインスクリーン情報に始まり、
描画に関する情報、フレームレート情報、音声情報、デモ情報、デバッグ情報と、多岐に渡ります。
これら情報は起動パラメータによりチューニングできる制御情報のため、本格的な初期化の前処理として
初期化を行われます。
初期化情報 | 説明 |
---|---|
ウィンドウサイズ | Godクラスがメインスクリーンに描画を行うサイズ。 |
ウィンドウ再描画サイズ | |
メインスクリーンアタッチ | 生成したメインスクリーンをGodクラスのメンバに設定します。 |
フレームレート | ゲームのフレームレートとなります。 |
音のオン/オフ | ゲーム中の音声(SE, BGM)のON/OFFとなります。 |
BGMの外部使用 | ゲーム中のBGMの外部ファイル読み込みのON/OFFとなります。 |
描画モード | Godクラスが再描画を行うための仕様となります。 |
描画詳細表示レベル | Godクラスの背景描画の仕様となります。 |
クロマキー(開発用) | 画像をロードする時に半透明にする色となります。 |
デモ記録モード(開発用) | デモを作成するモードとなります。 |
デバッグ情報(開発用) | その他デバッグ情報となります。 |
・中核オブジェクトのメインループの呼び出し
参考ソース(適当):
ActionGame.java mainメソッド
中核オブジェクトの初期化を行ったら、ゲームフレームワークのループ処理に制御を移します。
このループ処理というのは、「ユーザーの入力確認 → ゲームの演算 → ゲーム画面の描画」をゲームが
終了するまで繰り返す処理を示します。
このループ処理はGodクラスのstartメソッドが行っており、このループの開始をActionGameクラスが依頼します。
この関数が呼び出されると、ゲーム上のプログラム終了処理が終了するまで無限に処理を行います。
「Sample Action Game」ではタイトル画面にて"PROGRAM END"を実行する以外は、このループが繰り返されます。
ただし、Java上におけるプログラムの
終了イベントが発生し、プログラムの強制終了が発生した場合には、ループよりも上位のレベル
(Javaの仕様として)でプログラムの終了が行われます。
(Windowsの場合はAlt+F4キーとなります。X Window Systemの場合はウィンドウマネージャにより
異なります)
メインループ処理に関しては「3.4.中核 (Godクラス)」の「メインループ処理」にて具体的に説明を行います。
・キーボード入力のイベント処理と情報保持 (Controller, SpecialKeyクラス)
参考ソース(適当):
ActionGame.java processKeyEventメソッド,
Controller.java,
SpecialKey.java
キーボード入力のイベント処理はプレイヤーが入力したキーボードの入力情報を
Javaの仮想マシンがActionGameクラス(JFrameクラス)に対して通知を行い、
これをフレームワーク内のコントローラー情報に設定するイベントとなります。
このイベントはActionGame.processKeyEventにて実現し、引数で渡ってくるKeyEventクラスの
情報を読み取り、このキー情報を解析し、コントロール情報及び特殊キー情報を
それぞれ担当するコントロールクラス(Controller)と特殊キークラス(SpecialKey)に
設定します。
情報 | クラス | キー | 情報 |
---|---|---|---|
プレイヤー コントロール | Controller | ↑(上) | プレイヤー上 |
↓(下) | プレイヤー下 | ||
→(右) | プレイヤー右 | ||
←(左) | プレイヤー左 | ||
Z | ボタン1 | ||
X | ボタン2 | ||
C | ボタン3 | ||
W | SELECT | ||
Q | START/PAUSE | ||
Enter | |||
特殊キー | SpecialKey | F2 | 詳細表示レベルダウン1 |
F3 | 詳細表示レベルダウン2 | ||
F4 | BGM オン/オフ | ||
F5 | 音声オン/オフ | ||
F7 | フレームレート上げ | ||
F8 | フレームレート下げ | ||
F12 | スクリーンショット |