プレイヤーを動かせるようにしましたので、今回はプレイヤーの攻撃手段として、弾を発射させてみようと思います。
シューティングゲームの醍醐味として、連続で飛ばせるようにしなければ爽快感もありませんので、一定間隔を保ちながら、連続で弾を発射できるようにします。
シューティングゲームで弾を発射する方法【Python・Pygame】
まずは、弾となる画像ファイルを用意しましょう。シューティングゲームのフリー素材として弾のようなエフェクトを公開してくれている方々がたくさんいるので、好きなものを入手してください。
以前と同様に「Shooting」スクリプトを開いて追記していきます。
弾を準備する関数「set_bullet」と弾の動きを管理する「move_bullet」を作成します。
複数の弾を発射するために、リストを使います。とりあえず弾の最大値を100としていますが、現時点ではスペースキーを押し続けている限り、無限に発射することが出来ます。
52行目でスペースキーの入力を取得しますが、一定間隔で弾を飛ばすために、次の行でスペースキーが押されている間は、5フレーム毎に弾を飛ばすようにしています。
set_bulletにて、発射フラグをTrueにし、弾のXとY座標にプレイヤーの座標を代入します。そのまま代入すると位置がズレてしまうので、プレイヤーのドット数から微調整します。
move_bulletで、発射フラグがTrueなら、弾のY座標を指定した値で減らしていきます。最終的に0以下になったらフラグをFalseに戻して弾を消します。
※実行時にやたらスピードが速いと思ってたら、フレームレートの指定をしていませんでした。上のスクリプトを見ると分かると思いますが、フレームレートを30にしました。その影響としてプレイヤーのキー入力における移動距離を調整しました。
こちらは、スペースキーを押しっぱなしの状態です。この弾同士の間隔やスピードは簡単に変えることが出来るので、お好みで調整すると良いでしょう。