シューティングゲームガイド

Java でシューティングゲームを作成する場合のガイドです。

前田稔の超初心者のプログラム入門

シューティングゲームガイド

  1. Java では描画速度を要求するシューティングゲームは無理だと思っていたのですが、ハードの進歩とソフトの改良で何とかなりそうなので、 シューティングゲームに挑戦してみましょう。
    ゲームプログラムは、今まで説明したことの集大成です。欲張らずに基礎から学んで下さい。
    ここでは基本的な知識があることを前提に Java のシューティングゲームに付いて説明します。
  2. シューティングゲームで最も重要となるのが描画速度です。
    画面全体に描画される背景や、敵(Enemy)/味方の画像や、双方から発射される弾丸の画像は100枚を超えることも珍しくありません。
    シューティングゲームでは速い動きが生命線ですから、もたもたしていてはゲームになりません。
    1秒間に描画するフレーム数を FPS(frames per second)と言います。
    一般的に1秒間に60フレーム(または30フレーム)描画されます。
    この値はテレビと同じ値で、人間がチラツキを感じることなく見ることが出来る速度です。
    つまり「1/60秒(または1/30秒)」の間に、これらの画像を描画するマシンの能力が必要になります。
  3. FPS の設定は、コンシューマゲームでは垂直同期信号に合わせてフレームを描画する方法などが用いられますが、 Windows(DirectX) の環境ではマシンの性能や設定により同期信号の周波数が異なります。
    そこで、タイマー割り込みや高精度タイマーを使って FPS を一定に揃えることが必要です。
    今回のゲームでは Runnable(スレッド)を使って FPS を制御しています。
  4. 現在表示中の画面イメージを格納している領域をフレームバッファ(フロントバッファ)などと呼びます。
    フロントバッファに直接画像を描画していたのでは、画面のチラツキが避けられません。
    そこでフロントバッファと同様のバックバッファを使って、画面全体が完成してから一挙にバックバッファからフロントバッファに転送します。
    この手法をダブルバッファ(Double Buffer)と呼びます。
  5. 次はキー操作の問題です。
    キーを押し続けるとリピート機能が働いて、連続してキーが入力されるようになります。
    このとき問題になるのが、一回目の入力と二回目の入力の間にタイムラグが生じることです。
    普通に文章をタイプするときには必須の機能も、ゲームの操作には向きません。
    Windows には、リアルタイムにキー状態を取得する API があるのですが Java では見つかりません。
    そこで Listener を使ってタイムラグが生じないようにキーの状態を設定します。
    keyPressed() でキーの状態を ON にして、keyReleased() で OFF にします。
    これでタイムラグが無いキーの状態を取得出来るようになります。
  6. シューティングゲームでも背景画像に BG(Back Ground)を使うこともあるのですが BG の説明は RPG GAME に譲ります。

Java Game Program