書き物

技術とか作った物の話とか愚痴文句感想など

当たり判定の種類別の当たり判定処理

現状想定している当たり判定の種類は以下の通り。

  1. ステージ当たり判定
  2. 押し当たり判定
  3. 攻撃当たり判定
  4. 攻撃相殺当たり判定

これらはそれぞれ当たり判定の取り方が違います。

おおよそ以下のような感じにしてみます。

実際の当たり判定処理ではいろんなパラメータやらで、当たり判定のある無しを調整したりするのですが、それは省きます。

ステージ当たり判定

判定対象

オブジェクトのステージ当たり判定エリア VS ステージ

当たり判定があった場合

当たったオブジェクトの onStageHit メソッドを呼ぶ。

呼ばれるメソッドの引数
  • 地面、天井、右壁、左壁のどれに当たったのかの情報
  • 当たった地面、天井、壁の座標情報

押し当たり判定

判定対象

オブジェクトの押し当たり判定エリア VS 別オブジェクトの押し当たり判定エリア

当たりの取り方

オブジェクトの組み合わせで、それぞれ1ペアにつき1回だけ当たり判定を行う。

obj1、obj2、obj3、obj4がいるなら、

  • obj1 VS obj2
  • obj1 VS obj3
  • obj1 VS obj4
  • obj2 VS obj3
  • obj2 VS obj4
  • obj3 VS obj4

に対して判定を行う。

当たり判定があった場合

それぞれのオブジェクトの onPush メソッドを呼ぶ。

呼ばれるメソッドの引数
  • 押した相手のオブジェクト
  • 押した相手に対してどの方向から当たったかの情報

攻撃当たり判定

判定対象

攻撃側オブジェクトの攻撃当たり判定エリア VS 受け側オブジェクトのダメージ当たり判定エリア

当たりの取り方

obj1、obj2、obj3、obj4がいるなら、

  • obj1.attackHitArea VS obj2.damageHitArea
  • obj1.attackHitArea VS obj3.damageHitArea
  • obj1.attackHitArea VS obj4.damageHitArea
  • obj2.attackHitArea VS obj1.damageHitArea
  • obj2.attackHitArea VS obj3.damageHitArea
  • obj2.attackHitArea VS obj4.damageHitArea
  • obj3.attackHitArea VS obj1.damageHitArea
  • obj3.attackHitArea VS obj2.damageHitArea
  • obj3.attackHitArea VS obj4.damageHitArea
  • obj4.attackHitArea VS obj1.damageHitArea
  • obj4.attackHitArea VS obj2.damageHitArea
  • obj4.attackHitArea VS obj3.damageHitArea

に対して判定を行う。

攻撃エリアとダメージエリアの当たり判定があった場合でも、自分と相手の攻撃エリアの当たり判定があった場合(攻撃の相殺が発生する場合)は、当たり判定無しとする。

当たり判定があった場合

攻撃側オブジェクトの onAttackHit メソッドと受け側オブジェクトの onDamage メソッドを呼ぶ。

onAttackHit メソッドの引数
  • 攻撃を当てた相手オブジェクト
  • 攻撃を当てた相手に対してどの方向から攻撃を当てたかの情報
  • 判定を行った2つの判定エリアの重なっている部分の矩形
onDamage メソッドの引数
  • 攻撃を当ててきた相手オブジェクト
  • 自分がどの方向から攻撃を当てられたかの情報
  • 判定を行った2つのエリアの重なっている部分の矩形

攻撃相殺当たり判定

判定対象

オブジェクトの攻撃当たり判定エリア VS 別オブジェクトの攻撃当たり判定エリア

当たりの取り方

押し当たり判定と同様。

当たり判定があった場合

それぞれのオブジェクトの onCounterbalance メソッドを呼ぶ。("相殺"の英語はこれで合っているのかしら)

呼ばれるメソッドの引数
  • 攻撃してきた相手オブジェクト
  • 攻撃してきた相手に対してどの方向から攻撃が当たったかの情報
  • 判定を行った2つのエリアの重なっている部分の矩形