ポンクソフト

敵登場・仮想画面 - Javaでシューティングゲームを作ろう

前ページ Javaでシューティングゲームを作ろう TOP 次ページ

目次

  1. Javaでシューティングゲームを作ろう
  2. 自機の左右移動
  3. 弾発射・はみ出しチェック
  4. 敵登場・仮想画面
  5. 当たり判定(敵と弾)・スコア
  6. 当たり判定(自機と敵)・シーン切り替え
  7. クラス化
  8. 継承・Vectorによるキャラ管理・サウンド
  9. パワーアップ・複数種類の敵
  10. ペンギンシューティング

今回の題材

プレイしてみる
一式ダウンロード

ソースの解説

仮想画面とは

仮想画面とは、実際に表示されている画面の他に、メモリ上に仮想的な画面を持つことを言います。シューティング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メソッドを呼び出しています。
前ページ Javaでシューティングゲームを作ろう TOP 次ページ
このエントリーをはてなブックマークに追加 そっか0

このページに関するコメントをどうぞ

お名前:



できるかな
2017/02/21 18:59

n3
Shooting6.javaには当たり判定がどこにも記述されていないのですがよろしければどこに、どういうふうに記述したらよいのか教えてもらえないでしょうか
2017/02/01 21:16

名無しのリーク
香川県ルー餃子のフジフーヅはバイトにパワハラの末指切断の重傷を負わせた犯罪企業
2017/01/29 05:08

名無しのリーク
香川県ルーちゃん餃子のフジフーヅはバイトにパワハラの末指切断の大けがを負わせた犯罪企業
2017/01/28 16:09

名無しのリーク
香川県ルー餃子のフジフーヅはバイトにパワハラの末指切断の重傷を負わせた犯罪企業
2017/01/26 03:03

名無しのリーク
香川県ルー餃子のフジフーヅはバイトにパワハラの末指切断の重傷を負わせた犯罪企業
2017/01/26 03:03

dead ライジング
javaってなに?
2017/01/24 14:29

すみませんが…
tflagの初期がfalseの状態で!tflagがfalseにあたるのがわかりません。
2017/01/05 11:35

missiy
ゲーム制作始めますか
2016/11/04 20:32

デトロイト
おーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
2016/10/12 17:56

残りを読む »