Appearance
第05回 プレイヤーを狙う敵弾
前回は、プレイヤーの弾を敵へ当てて倒せるようになりました。 今回は、敵がプレイヤーを狙って発射する敵弾を追加します。
敵弾はプレイヤーの位置を発射時に目標として受け取り、その後は同じ方向へ進み続けます。
配布プロジェクト
前回の作業が完了した状態と同等のプロジェクトを配布します。 第05回のプロジェクトを展開し、ShootingGame2D.slnをVisual Studio 2026で開いてください。
この回のゴール
授業終了時には、敵がプレイヤーの発射時点の位置を狙って敵弾を撃ち、敵弾がその方向へ進むようにします。
- 敵弾1発分を
EnemyShotとして管理する EnemyShotManagerで敵弾を固定数所有し再利用する- 2点の差から方向を求め、長さをそろえて速度を設定する
- 発射時の目標と発射後の移動を分けて説明する
今回のポイント
プレイヤー弾と敵弾は、どちらも飛んでいくオブジェクトです。 しかし、発射する側、向かう方向、後の命中判定が異なるため、既存のプレイヤー弾へ敵弾を混ぜません。
第02回のプレイヤー弾と第03回の敵Managerの仕組みを使い、敵弾専用の個体クラスとManagerを最初から用意します。
Enemy
発射位置と目標位置を渡す
EnemyShotManager
EnemyShotManager
空き要素へ生成を依頼
EnemyShot
EnemyShot
発射時点の位置へ向けて進む
Player
1 / 4敵弾1発分を作る敵弾の位置と速度を個体クラスへ分け、発射後の移動を独立させる2 / 4発射時の方向を求める発射位置から目標位置へ向かう方向を求め、弾速を一定にする3 / 4敵の発射処理を接続する敵の発射タイマーと敵弾Managerを接続し、発射時点のプレイヤーを狙わせる4 / 4敵弾の動作を確認する敵弾の方向、速度、再利用を確認し、次回の被弾処理へつなげる
今回実装する範囲
| 区分 | 内容 |
|---|---|
| 新しく作る処理 | EnemyShot、EnemyShotManager、方向計算、敵の発射タイマー |
| 既存の仕組みを反復する処理 | 個体クラス、固定容量、空き要素の再利用、Manager経由の描画 |
| 後の回で利用する処理 | 敵弾とプレイヤーの命中、HP、無敵時間 |
今回の完成例
まず自分の実装を動かしてから、第06回の配布プロジェクトを完成例として比較します。
| 確認するファイル | 確認する内容 |
|---|---|
EnemyShot.cpp | 発射時の方向計算、一定速度の移動、画面外での停止 |
EnemyShotManager.cpp | 敵弾の固定容量管理と再利用 |
Enemy.cpp | 発射間隔と敵弾生成の依頼 |
Game.cpp | 敵弾の更新、描画、発射時の目標位置の受け渡し |