前回の日記 (当たり判定の計算方法)
http://dixq.net/forum/blog.php?u=53&b=5959
で当たり判定が計算できました。
当たり判定を計算できた人は
「あたった!・・・で?」
となったかもしれません。
値を遠くから取得し、計算できることは分かりましたが、
ではどうやって当たったことを遠いクラスのインスタンスに通知するのでしょう?
これも前回と全く同じ造りで実現できます。 今回は死んだことが通知出来るインターフェイス「Killable」を定義します。
Killableは死んだことを通知出来る窓口としてDie()関数を持っています。
Playerに実装された関数Dieを前回と同じ方法でEnemyがコール出来るようにすれば
Enemy内で当たり判定で計算した時、あたったら、「Playerさん、あたったよ!」と伝えることができます。
こんな感じですね。
void Enemy::updateHit(){
Pos pos = mPlayerInfoGettable->GetPosition();
float range = mPlayerInfoGettable->GetRange();
if( isHit(pos, range) ){ //posとrangeで敵との当たり判定計算
mPlayerKillable->Die();
}
}
ただ今回はPlayerにもBossにもEnemyにも使えるようにKillableの窓口はDie()だけにしましたが、
四聖龍神録2の場合Playerだけに「喰らいボム」がありますので、
Playerは接触しても、すぐには死なず一瞬だけ無敵状態でボム受付時間に入ります。
0.X秒喰らいボム受付中にボムが入力されなかったら本当に死にます。
なので当たり判定の接触通知はDie()ではなくHit()にしています。