シューティングゲームを作ろう その8 |
14.敵と自機の弾の当たり判定 |
;敵と自機の弾の当たり判定 if shot_f == 1 { for i, 0, ENEMAX if enemy_state(i) == 1 & shot_x + 31 >= enemy_x(i) & shot_x <= enemy_x(i) + 31 & shot_y + 31 >= enemy_y(i) & shot_y <= enemy_y(i) + 31 { dsplay 1 enemy_state(i) = 2 eneexplode_cnt(i) = 0 shot_f = 0 score += 100 if score > hiscore { hiscore = score } } next }
敵と自機の弾の当たり判定は、見た目の大きさで行います。敵も自機の弾も32×32です。
自機の弾が存在する場合のみ当たり判定を行います。
通常状態の敵と当たり判定を行います。
shot_x + 31がenemy_x(i)以上、かつshot_xがenemy_x(i) + 31以下、かつshot_y + 31がenemy_y(i)以上、かつshot_yがenemy_y(i) + 31以下の時当たりです。
敵の爆発音を鳴らします。
敵の状態を「爆発中」に変えます。
敵の爆発用カウンタに0を入れます(explodeは「爆発する」です)。
自機の弾を消します。
スコアに100点加算します。
自機の弾を消すのではありますが、for 〜 nextループは続行します(_breakで抜けません)。弾が2匹以上の敵に同時に当たっている可能性もあるからです。
15.敵が爆発中の処理 |
;敵が爆発中の処理 for i, 0, ENEMAX if enemy_state(i) == 2 { eneexplode_cnt(i)++ if eneexplode_cnt(i) == 16 { enemy_state(i) = 0 } } next
爆発中の敵は移動しない、弾を撃たない、自機の弾との当たり判定を行わない、爆発中は爆炎を描く等は、該当するそれぞれの処理でやっています。
あとは、爆発状態をしばらく維持するだけです。そこで、爆発中の敵については爆発用カウンタを1ずつ増やし、16になったら消します。
なお、敵が爆発中の処理は敵と自機の弾の当たり判定より前に書きます。後ろに書くと、eneexplode_cnt(i)の初期値を0に設定したのに、すぐさま1に変わってしまうからです。