Appearance
第04回 プレイヤーの弾と敵の命中判定
1 / 4 表示範囲と命中範囲を確認する
このステップの目的
画面上の見た目とゲーム上の接触範囲を分けて考える
2つの矩形
第01回から、画像を表示するDrawRectと接触を調べるHitboxを分けています。 画像の余白を含めて命中させたり、見た目だけを大きくして判定まで変えたりしないためです。
GameTuning.hcpp
inline constexpr Rect DrawRect = Rect::Centered(10.0f, 28.0f);
inline constexpr Rect Hitbox = Rect::Centered(8.0f, 20.0f);どちらもオブジェクトの中心座標からの相対範囲です。 現在位置へ移動した矩形を返すGetDrawRect()とGetHitbox()を、呼び出し側が使い分けます。
重なりを判定する
Rect::Overlaps()は、2つの矩形が重なっているときにtrueを返します。 命中判定の数式をGame.cppへ書かず、矩形の責任として用意された関数を利用します。
Game.cppcpp
if (playerShot.GetHitbox().Overlaps(enemy.GetHitbox()))
{
// 命中したときの処理
}チェックリスト
- 表示矩形と命中矩形の役割を説明できる
- 中心座標から相対的に矩形を作っている
- 命中判定で
GetHitbox()を使っている