カテゴリ | 情報(主となるもの) | 説明 |
---|---|---|
システム情報 | バージョン | プログラムのバージョン。 |
コンポーネント | 描画コンポーネント (メインスクリーン) | ActionGameクラスにて生成されたメインスクリーン。ActionGameクラスよりアタッチされます。 |
描画情報 | スクリーン解像度幅/高さ | ゲーム画面の大きさ。これはウィンドウのサイズではなく、内部で描画する画面の大きさとなります。 |
テキストスクリーンフォント幅/高さ | 画面に表示する文字列の1文字の大きさ。現在は幅8ピクセル、高さ8ピクセルとなります。 | |
BGスクリーンセルサイズ | 画面に表示する背景要素(セル)の1要素の大きさ。現在は幅8ピクセル、高さ8ピクセルとなります。 | |
バックバッファ画像 | 描画が行われるゲーム画面イメージとそれを操作するグラフィックオブジェクトとなります。 | |
バックバッファグラフィック | ||
バックバッファ画像(PAUSE用) | PAUSE時に描画が行われるゲーム画面イメージとなります。 | |
透過用のイメージフィルタ | 画像読み込み時に使用されるクロマキー(抜き色)用イメージフィルタとなります。 | |
画面エフェクト | 画面合成の際に画面効果として処理するタスクとなります。 | |
描画オブジェクト | スプライトスクリーン | 擬似スプライトプレーンを実現するオブジェクトとなります。 |
テキストスクリーン | 擬似テキストプレーンを実現するオブジェクトとなります。 | |
BGスクリーン | 擬似BGプレーンを実現するオブジェクトとなります。 | |
スクリーン管理 | スプライト、テキスト、BGのスクリーン状態の管理を行うオブジェクトとなります。 | |
プログラム管理 | ステージ管理 | ステージ管理オブジェクトとなります。このステージ管理オブジェクト内に各キャラクター管理が入ります。 |
フレームレート | ゲーム全体のフレームレート処理に使用するフレームレートとなります。 | |
音声管理 | サウンド管理 | SE, BGM管理を行うオブジェクトとなります。 |
ユーティリティ | ランダム | ゲーム中に使用するランダムオブジェクトとなります。 |
かなりの情報が中核クラスに集約されていますが、実際にこれらを用いるのは、本クラスの管理下にある、各タスククラス(Task)が
使用することになります。
(あくまで中核クラスはマネージメントに徹することが主となり、その管理下にある部下達に様々情報を提供することになります)
・初期化と必要オブジェクトの生成
参考ソース(適当):
God.java initializeメソッド
中核クラスの初期化はプログラムインスタンス生成時に行われ、上述にて一覧したデータの生成/初期化を行います。
・メインループ処理
参考ソース(適当):
God.java startメソッド
メインループ処理はプログラムのインスタンス生成後にゲーム本体の処理としてプログラム終了まで無限に実行される処理となります。
メインループ処理は中核クラスにて実現しており、ActionGame.main関数よりGod.start関数が呼び出されます。
処理をイメージにするとおおまか以下ようになります。
・メイン処理
参考ソース(適当):
God.java mainProcessメソッド
メイン処理はゲームの本質となる部分の処理となり、プログラムが停止(PAUSE)していない場合は常に本処理が実行されます。
メイン処理はステージ管理クラス(StageScheduler)に現在のステージの実行を依頼し、その処理後に合成スクリーンに描画、
特殊処理を実行、画面効果処理を実行、メインスクリーンクラス(MainScreen)に合成スクリーン情報の転写依頼といった処理を
順番に行います。
これらのうち、特殊処理はファンクションキーに割り当てられた「システムの情報を変更する処理」、画面効果処理は
フェードイン/アウトクラス(EffectFadeInOutTask)、地震クラス(EffectQuakeTask)、伸縮クラス(EffectStretchScreenTask)といった、
「システムで共通に使用する合成スクリーンを直接操作する処理」といったことを行います。
・停止(PAUSE)処理
参考ソース(適当):
God.java startPauseProcess, pauseProcessメソッド
停止処理はゲームの中断及び中断中の処理を行うものとなり、二段階の処理にて実現しています。
1段階目(startPauseProcessメソッド)
[停止開始時]
デモプレー実行時の中止、音声の中断、停止画面の生成を行い、停止モードになります。
停止画面については本節の「スクリーン合成(ダブルバッファ)」にて説明を行います。
[停止解除時]
音声の再開を行い、停止モードを解除します。
2段階目(pasuseProcessメソッド)
停止中に呼び出される処理となり、1段階目で作成された停止画面を常に描画します。
1段階目で作成する停止画面は、メイン処理にて作成されるスクリーン画像を停止用スクリーン画像に
転写して、その画像を暗くします。暗くした画像を作成したら、その画像の上に停止中のテキストや
ステージ5にて入手したアイテムの描画を行います。ステージ5にて入手したアイテムの描画は
TreasureLookingGlassTaskクラスにて実現します。
・ウェイト処理
参考ソース(適当):
God.java startメソッド
ウェイト処理はゲームタイミングを調整する処理となり、メトロノームのような働きを行います。
これは処理が短時間に完了してしまっても、即座に次の処理に行かないようにタイミングを取るために行います。
(※本ゲームは基本的に1秒間中に約60コマ数(約17ミリ秒程度)の処理が間に合うことを前提としています。
そのため処理が間に合わない場合は待ち時間無しの全力で処理を行い続けることが発生し、CPU使用状況が100%状態となります。
この状態は一般に「処理落ち」と呼ばれる状態となり、スローモーションのような状態になります)
このウェイトの時間処理は、
1.現在時間を取得。
2.メイン/停止処理を実行。
3.現在時間を取得して、「1.」の時間との差分を求めてどの程度経過したかを判断。
もしもこの時間が指定の時間(フレーム)レート未満の場合は、処理が間に合っているので、
その時間が経過するまでプログラムを眠らせる。(Thread.sleepメソッド)
としています。
・スクリーンショット (ScreenshotManagerクラス)
参考ソース(適当):
God.java screenShotProcessメソッド,
ScreenshotManager.java createScreenShotメソッド
スクリーンショットはプレー中、F12キーを押下した際に実行されます。
スクリーンショットの画面はスクリーン合成画面をjavax.imageio.ImageIOに
渡してPNGファイル形式にて出力します。
(この処理の担当はScreenshotManagerクラスが実現します)
・スクリーン合成(ダブルバッファリング)
参考ソース(適当):
God.java drawメソッド
スクリーン合成はゲーム中の背景やキャラクターの画像を合成して一枚の画像に仕上げるための
処理となります。
合成された画像はウィンドウに一括転送され、プレイヤーが初めて視覚として見ることができます。
このような処理を行っている理由は、プレイヤーが見るウィンドウ上でこのような描画処理を行うと、
画面がチラついたり、描画を行っている最中の状態が画面に表示されてしまい、プレイ画面と実際の処理の
同期が取れなくなる場合があるためです。(このような処理を一般的にダブルバッファリング処理といいます)
スクリーン合成用の画像は2種類あり、メイン画像(バッファ)とPAUSE画面(バッファ)があります。
これらそれぞれは、ゲームの実行/停止により使い分けが行われ、ゲーム実行中
(これはタイトル画面等のプレーに直接関わらないような画面も含まれます)はメイン画面、
停止中(これはPAUSE中)は、PAUSE画面が表示されます。
PAUSE画面はゲーム停止直後に、メイン画面をコピーし、その上に停止情報(ステージ名や宝物出現のヒント等)
を描画します。
画面構成物 | 説明 | |
---|---|---|
テキスト | 文字を表示する画面。(TextScreenクラス) | |
スプライト | キャラクターを表示する画面。キャラクター描画には背景への描画優先順位と、キャラクターの描画優先順位があります。(SpriteScreenクラス) | |
背景 | 一番手前の背景 | 背景画面1。主なキャラクターを覆う位置づけ。(BGScreenクラス) |
二番目に手前の背景 | 背景画面2。主なキャラクターのすぐ後ろの位置づけ。(BGScreenクラス) | |
一番奥の背景 | 背景画面3。遠くの背景の位置づけ。(BGScreenクラス) |