Appearance
第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
1 / 4PlayerにHPと被弾処理を追加するプレイヤー自身がHPと無敵時間を管理し、被弾の成立結果を呼び出し側へ返す2 / 4無敵時間を更新する被弾後の一定時間をタイマーで管理し、連続接触による連続ダメージを防ぐ3 / 4敵弾と敵の接触を処理する敵弾または敵がプレイヤーへ接触したとき、共通の被弾処理へつなぐ4 / 4被弾を動作確認するHP、無敵時間、敵弾の停止を観察し、次回の終了条件へつなげる
今回実装する範囲
| 区分 | 内容 |
|---|---|
| 新しく実装する処理 | HP、無敵時間、敵弾・敵とプレイヤーの被弾 |
| 既存の処理を利用する | Rect::Overlaps()、EnemyShotManager、敵との接触判定 |
| 後の回で利用する処理 | IsAlive()をゲームオーバー条件へ接続、無敵中の表示、被弾SE |
今回の完成例
まず自分の実装を動かしてから、第07回の配布プロジェクトを完成例として比較します。
| 確認するファイル | 確認する内容 |
|---|---|
Player.cpp | HPの初期化、被弾成立、無敵タイマーの更新 |
Game.cpp | 敵弾・敵との接触をPlayerへ依頼する流れ |
Player.h | HP、無敵時間、TryTakeDamage()の責任 |