RPGゲームガイド

Java でRPGゲームを作成する場合のガイドです。

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

RPGゲームガイド

  1. ゲームプログラムは、今まで説明したことの集大成です。欲張らずに基礎から学んで下さい。
    ここでは基本的な知識があることを前提に Java のRPGゲームに付いて説明します。
  2. RPG(Role Playing Game)の背景画像は、マップチップと呼ばれるタイル状の画像を組み合わせて描画する BG(Back Ground)が重要な役割を担います。
    BG は RPG に限らず、他のゲームでも使用されますが、ウインドウの何十倍もの大きな背景画像を使う RPG では特に重要です。
    マップチップを組み合わせた背景画像は、一般的には MapEditor などと呼ばれる専用のツールで作成します。
    私が開発した MapEditor は「超初心者のプログラム入門/Game Program & 各種 Tool/Map Editor」から提供しています。
  3. RPG では World Map や Field Map やダンジョンなど多くの場面で BG(背景画像)が使われます。
    BG を使えばウインドウの何十倍(何百倍)もの大きな背景画像をメモリの制約を気にすること無く使用することが出来ます。
    BG で作成した画像を背景に、セルの属性を利用してキャラクタを制御する方法も一般的です。
    また、ゲームの進行に合わせて背景画像の一部を切り替える場合(ドアの開閉や宝箱の蓋など)にも BG が使われます。
    BG を利用して、次のような使い方が考えられます。
  4. BG の属性を使ってキャラクタを制御する場合には、マップチップの境界に沿って移動すると好都合です。
    そこで操作キーから手を離した後も、マップチップの境界まで自動的に進めます。
    キー操作のプログラムでは、キーを押し続けるとリピート機能が働いて、連続してキーが入力されるようになります。
    このとき問題になるのが、一回目の入力と二回目の入力の間にタイムラグが生じることです。
    普通に文章をタイプするときには必須の機能も、ゲームの操作には向きません。
    Windows には、現時点でのキー状態を取得する API があるのですが Java では見つかりません。
    そこで Listener を使ってタイムラグが生じないようにキーの状態を設定します。
    keyPressed() でキーの状態を ON にして、keyReleased() で OFF にします。
    これでタイムラグが無いキーの状態を取得出来るようになります。
  5. 簡単な背景画像ならマップチップ(index)の並び情報を直接プログラムで定義しても良いのですが、大きな背景になると MapEditor の出力ファイルを使います。
    私が開発した MapEditor では、作成した背景画像のマップチップの並び情報を TEXT 形式で出力することが出来ます。
    MapEditor で作成した TEXT 形式のファイルを読んで BG を描画する方法も説明します。
    セルの属性を利用する場合には、マップチップ画像に対応する属性を定義した TEXT 形式のデータを配列に読み込みます。
  6. 1秒間に描画するフレーム数を FPS(frames per second)と言います。
    一般的に1秒間に60フレーム(または30フレーム)描画されます。
    この値はテレビと同じ値で、人間がチラツキを感じることなく見ることが出来る速度です。
    つまり「1/60秒(または1/30秒)」の間に、一枚のフレームを描画するマシンの能力が必要になります。
  7. FPS の設定は、コンシューマゲームでは垂直同期信号に合わせてフレームを描画する方法などが用いられますが、 Windows(DirectX) の環境ではマシンの性能や設定により同期信号の周波数が異なります。
    そこで、タイマー割り込みや高精度タイマーを使って FPS を一定に揃えることが必要です。
    今回は Runnable(スレッド)を使って FPS を制御しています。
  8. 現在表示中の画面イメージを格納している領域をフレームバッファ(フロントバッファ)などと呼びます。
    フロントバッファに直接画像を描画していたのでは、画面のチラツキが避けられません。
    そこでフロントバッファと同様のバックバッファを使って、画面全体が完成してから一挙にバックバッファからフロントバッファに転送します。
    この手法をダブルバッファ(Double Buffer)と呼びます。
  9. RPG ゲームで最も難しいのが「ドット単位に BG(背景)をスクロール」する処理です。
    一枚の画像なら簡単なのですが、マップチップを組み合わせた背景画像となると一苦労です。
    BG のスクロールには、二種類の方法があります。
    1. キャラクタを中央に置く方法
      キャラクタを中央に置いて、先に背景画像からスクロールします。
      背景画像がスクロール出来なくなったら、キャラクタを動かします。
      戻るときはキャラクタが中央に来るまで移動し、中央に来たら背景をスクロールします。
    2. キャラクタから動かす方法
      矢印キーの操作で先にキャラクタを動かします。
      キャラクタがウインドウの端に来ると背景をスクロールします。
    今回はキャラクタを中央に置く方法を使っています。

Java Game Program