当たり判定の種類別の当たり判定処理
現状想定している当たり判定の種類は以下の通り。
- ステージ当たり判定
- 押し当たり判定
- 攻撃当たり判定
- 攻撃相殺当たり判定
これらはそれぞれ当たり判定の取り方が違います。
おおよそ以下のような感じにしてみます。
実際の当たり判定処理ではいろんなパラメータやらで、当たり判定のある無しを調整したりするのですが、それは省きます。
ステージ当たり判定
判定対象
オブジェクトのステージ当たり判定エリア 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つのエリアの重なっている部分の矩形