前回は、敵を出現させて、一定の距離になったら弾を飛ばしてくる処理まで作成していましたね。
こちらもスペースで弾を飛ばす事が出来るので、プレイヤーが発射した弾が敵に当たったらその場で敵を削除するようにしたいと思います。
敵に弾がヒットしたら敵を削除する処理の実装【Python】
ちょっとプログラムが長くなってきたので、今回は追記した部分を画像にしています。変更しなければいけない箇所が多岐に渡る場合は、全文貼りたいと思いますが、ブロック単位の場合は画像にて赤で修正部分を囲っておこうと思います。
まずは、敵の弾を管理している定数を宣言します。(私の場合0が敵本体の画像で1が敵の弾画像なので1になりますね。)
二点間の距離を求める関数として「distance」を作りました。これは、プレイヤーの弾と敵限定ではなく、敵の弾とプレイヤーといったように応用出来るので、使い勝手の良い関数です。
基本的に、シューティングゲームは円による当たり判定を実装することが多いと思います。というわけで私も敵と弾を円と考えて当たり判定を実装しています。
Unityで言うとカプセルやスフィアコライダのようなものです。
弾同士の当たり判定は意味がないので、101行目の条件文で、敵の弾以外なら当たり判定をチェックするようにしています。
現状敵の種類は1体ですが、種類が増える事を想定して、その都度敵の幅と高さを取得します。
敵と弾の当たり判定用の距離は、104行目の式で求めます。私は、弾の半径を8ドットとしていますが、この値は実際にゲームを実行しながら微調整すると良いと思います。
後はfor文で弾の存在をチェックして、distance関数で求めた距離が「r×r」未満なら敵の画像とプレイヤーの弾をFalseにして削除します。
この処理を実装出来れば、プレイヤーと敵の弾の当たり判定にも応用出来るはずです。