敵登場・仮想画面 - Javaでシューティングゲームを作ろう
目次
- Javaでシューティングゲームを作ろう
- 自機の左右移動
- 弾発射・はみ出しチェック
- 敵登場・仮想画面
- 当たり判定(敵と弾)・スコア
- 当たり判定(自機と敵)・シーン切り替え
- クラス化
- 継承・Vectorによるキャラ管理・サウンド
- パワーアップ・複数種類の敵
- ペンギンシューティング
今回の題材
- 敵登場
- 仮想画面
一式ダウンロード
ソースの解説
仮想画面とは
仮想画面とは、実際に表示されている画面の他に、メモリ上に仮想的な画面を持つことを言います。シューティング1、2をやってみると分かりますが、遅いマシンでは自機や弾がチラつきます。原因は毎フレーム毎に画面を全て一度消し、改めて自機や弾を描画しているためです。これを防ぐために仮想画面を用意し、自機や弾の描画はそこで行い、全ての描画が終わった時点で実際の画面に転送することによってチラつきを防ぐことができるのです。仮想画面はゲームを作る上で必須のテクニックなので覚えておいてください。
Shooting3クラス フィールド
Image teki;
int ex, ey;
tekiは敵の画像が入るImageオブジェクトです。ex,eyは敵の座標です。
Image offImage;
仮想画面用のImageオブジェクトを宣言しています。Shooting3クラス initメソッド
ex = (int)(Math.random() * (300 - 32));
敵の横出現位置をランダムにしたいので、java.lang.Mathクラスのクラスメソッドrandomを呼び出しています。(int)(Math.random() * N) とすれば0以上N未満の整数の乱数を取得できます。
offImage = createImage(300, 400);
仮想画面を(300,400)のサイズで作成します。Shooting3クラス runメソッド
ey += 8;
if (ey >= 400) {
ex = (int)(Math.random() * (300 - 32));
ey = -32;
}
敵移動部分です。画面下に向かって移動し、画面下に消えたなら画面の一番上から横位置をランダムにして再出現させます。Shooting3クラス paintメソッド
まず仮想画面に全ての描画を行ってから仮想画面を実際の画面に転送する処理を行います。
Graphics gv = offImage.getGraphics();
仮想画面に描画するためのGraphicsオブジェクトを取得しています。
gv.clearRect(0, 0, 300, 400);
仮想画面を背景色で消去します。
gv.drawImage(teki, ex, ey, this);
敵の描画を行います。
g.drawImage(offImage, 0, 0, this);
仮想画面から実際の画面への転送を行います。Shooting3クラス updateメソッド
1フレームの処理が終わりrepaintメソッドを呼び出したとき、paintメソッドが直接呼び出されるのではなく、実際にはupdateメソッドが呼び出されます。updateメソッドはまず背景色で画面をすべてクリアしてからpaintメソッドを呼び出します。
今回は仮想画面を作って自前でクリア処理を行っているので、このupdateメソッドをオーバーライドして画面クリア処理を行わずにpaintメソッドを呼び出しています。