Skip to content

第06回 プレイヤーの被弾

前回は、敵がプレイヤーの位置を狙って敵弾を発射できるようになりました。 今回は、敵弾がプレイヤーに当たったときの被弾を処理します。

被弾したプレイヤーはHPを失い、一定時間は続けてダメージを受けないようにします。

配布プロジェクト

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

この回のゴール

授業終了時には、敵弾や敵に接触するとプレイヤーのHPが減り、一定時間は続けて被弾しないようにします。

  • 敵弾とプレイヤーの命中を判定する
  • プレイヤーのHPと無敵時間をPlayerで管理する
  • 被弾が成立したときだけHPを減らす
  • 敵との接触も同じ被弾処理へつなげる

今回のポイント

第04回では、Gameが弾と敵の接触を見つけ、命中した相手へ処理を依頼しました。 今回もその役割を変更せず、敵弾とプレイヤーの組み合わせを追加します。

被弾の成立条件とHP、無敵時間はPlayerへ置き、Gameは接触を見つけて依頼する役割を保ちます。

処理の流れ
EnemyShotManager
敵弾とPlayerの矩形を比較
Game
Game
被弾を依頼
Player
Player
HPを減らせたか返す
Game

今回実装する範囲

区分内容
新しく実装する処理HP、無敵時間、敵弾・敵とプレイヤーの被弾
既存の処理を利用するRect::Overlaps()EnemyShotManager、敵との接触判定
後の回で利用する処理IsAlive()をゲームオーバー条件へ接続、無敵中の表示、被弾SE

今回の完成例

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

確認するファイル確認する内容
Player.cppHPの初期化、被弾成立、無敵タイマーの更新
Game.cpp敵弾・敵との接触をPlayerへ依頼する流れ
Player.hHP、無敵時間、TryTakeDamage()の責任