Skip to content

第04回 プレイヤーの弾と敵の命中判定

前回は、敵が出現し、プレイヤーの弾が画面を飛ぶようになりました。 今回は、弾と敵が重なったときに命中として扱い、敵を倒せるようにします。

弾と敵の状態はそれぞれのクラスで管理し、衝突したかどうかの判断と得点の更新はGameが調停します。

配布プロジェクト

前回の作業が完了した状態と同等のプロジェクトを配布します。 第04回のプロジェクトを展開し、ShootingGame2D.slnをVisual Studio 2026で開いてください。

この回のゴール

授業終了時には、プレイヤーの弾が敵へ当たると敵と弾が停止し、敵を倒した数だけ得点が増えます。

  • 表示用の矩形と命中判定用の矩形を区別する
  • Rect::Overlaps()で2つの矩形の重なりを判定する
  • 命中した弾と敵をそれぞれのクラスへ依頼して停止する
  • Gameが相互作用の順序と得点を管理する

今回のポイント

弾と敵は、それぞれのクラスとManagerが状態を管理しています。 今回はその仕組みを変更せず、Gameへ相互作用の処理を追加します。

敵を直接削除したり、弾の配列をGameへ移したりしません。

処理の流れ
PlayerShotManager
命中判定の対象を渡す
Game
EnemyManager
命中判定の対象を渡す
Game
Game
命中した弾を停止
PlayerShot
Game
命中した敵へダメージ
Enemy

今回実装する範囲

区分内容
新しく実装する処理Rect::Overlaps()を使った弾と敵の命中、撃破、得点
既存の処理を利用するPlayerShotManagerEnemyManager、各オブジェクトのGetHitbox()
後の回で追加する処理敵弾との命中、プレイヤーHP、エフェクト、音声

今回の完成例

まず自分の実装を動かしてから、第05回の配布プロジェクトを完成例として比較します。

確認するファイル確認する内容
Enemy.cppHPの初期化とダメージによる停止
Game.cpp弾と敵の矩形比較、命中後の停止、撃破時の得点
GameTuning.h命中範囲、攻撃力、敵HPの調整値