Skip to content
第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()を使っている