弾を発射してみます


上の動画のようにAボタンを押したら、playerのスプライトから弾のスプライトを発射できるようにしてみます。


最初に画面左に飛行機のスプライトを設置してみます。



変数名はわかりやすいようにプレイヤーにして、スプライトのタイプをPlayer(プレイヤー)にします。

飛行機のスプライトを設置したら、位置の指定のブロックを挿入します。



弾スプライトを設置する時、スプライトのタイプをProjectile(プロジェクタイル:発射物)にします。

スプライトの設置後に弾スプライトの位置と速度を決めます。

速度を変更するブロックを挿入して、 vx か vy を 0 より大きな数字にすると指定した方向に弾が動き始めます。


vx の値のみ見ますが、数値が 0 より小さい場合は左側に移動し、0 より大きい場合は右側に移動します。

数値が大きい程スプライトは速く移動するようになります。


これでAボタンを押すことで弾を発射できるようになりましたが、



Aボタン連打で連射できてしまいます。




弾の発射の連射を禁止してみます。

Aボタンを押す度にスプライトが一つずつ増えていき、この弾スプライトはProjectileタイプという配列に格納されるようです。



このようにProjectileタイプの配列から値の長さ(個数)を調べ、0 である時のみ弾を発射できるようにします。

コードを実行してみて、Aボタンを押してみますが、画面から弾が消えても次の弾を発射することができません。


どうやら、画面端にたどり着いた弾のスプライトは削除されずにいるようです。



弾スプライトを設置するときに、弾スプライトの自動的に破壊をオンにするブロックを追加します。

この状態のコードで実行してみますと、



連射を禁止にしつつ、弾が画面端に到達した時は次の弾を発射できるようになりました。




弾の発射に関してのコードができましたので、コードを整理する意味合いで弾の発射を関数化しておきます。

Aボタンを押したときのブロック内の弾の発射に関するコードを抜き出して



弾の発射関数としてまとめておきます。





弾は常に一発だとゲーム性に欠けることもありますので、連射可能な弾数を設定してみます。



Orojectileタイプのスプライトの配列に格納されている個数を 3 個未満にしてみます。

コードを変更後に実行してみると、



弾の連射数が 3 になりました。

京都の東本願寺で開催されているプログラミング教室で講師をしています。
詳しくはTera schoolを御覧ください。
マインクラフト用ビジュアルエディタを開発しています。

詳しくはinunosinsi/mcws_blockly - githubをご覧ください。