2018年4月21日土曜日

弾を発射する - シューティングゲームを作ろう(2)

弾を発射する時に行う処理を考えたとき重要になるのが「クローン」という考え方です。

クローンってなんだ?

クローンとはつまりはコピーです。分身といったほうがいいかな?
クローンを作成すると、作成されたクローンはそれ自身が独立して動作します。
つまり、AというスプライトからA-1とA-2というクローンを作った場合、A-1とA-2はそれぞれ別々に動作します。
なので、弾を発射したら弾のクローンを作って飛ばす。という事をするわけです。

弾を作る

弾はとりあえず、ライブラリの「Ball」というスプライトを縮小して使用します。


弾には一つ仕掛けをしておきます。


「表示する」のチェックを外して、Ball自体の表示を消しておくんです。
なぜなら、実際に発射されて飛んでいくのは、クローンで作られた弾だからです。
この弾スプライト自身はクローンのための元というわけです。

弾を発射する

では実際に弾を発射してみましよう。
発射=弾のクローンを作るですね。
まずは、弾の動作を作成しておきます。弾のスプライトへ以下のプログラムを作成します。


弾が動作するきっかけは、自身がクローンされた時です。
なので、イベントから「クローンされたとき」を利用します。

ここでのポイントは1行目の「自機へ行く」
自機の移動でも利用した「○○へ行く」ですね。
弾がクローンされる時、自機がどこにいるかはわかりません。なので、自機がどこにいようとまず弾自身が自機の場所に移動する必要があります。
あとは、見たとおりですね。
元になるスプライトが隠された状態なので、クローンされたときも隠された状態で作成されます。
なので「表示する」も必要ですね。
あとは、端に触れるまで移動するだけです。
端まで行ったら、もう弾としての役割は終えたので、自身を削除して終了です。

続いて、発射する動作です。
こちらは「自機」スプライトへ作成します。


まず思いつく方法としては、スプライト(自機)がクリックされたら弾のクローンを作るという方法。
が、実際にやってみるとうまくいきません。

なぜか?

それは、移動している自機をよく見ると、マウスを追いかけているので、マウスから微妙に遅れて移動しているんです。
なので、移動しながらクリックした時にスプライトをクリックしていないときがあるんですね。
前回も書いた「クリックで発射はコツがいる」という理由がこれです。

頑張ってこの課題をクリアしてもいいんですが、今回はもっと簡単な方法でスペースキーで発射することにします。


これで、いつでもどこでもスペースキーを押すと弾のクローンが作成され、作成されたクローンは勝手に飛んでいくというわけです。

次回は敵機をと行きたいところですが、その前に基本的な部分をもう少し作っておきたいと思います。


サンプルプログラム
弾を打つ