[ 21.インベーダーゲームを作ろう その3 ] の続きです。
敵が自機に向かって進攻するようにしました。
続いて、自機からビームを撃てるようにしましたが、当たり判定は入ってません。
自機より発射されたビームが、敵を爆発させるように当たり判定を入れます。
まず、絵が必要ですね。
敵がビームと当たったとき爆発する絵を、コスチュームの1つとして用意します。
リミックスした人は、Gobo スプライトの3番目のコスチュームを使います。
Gobo のスクリプトを編集します。
クローンされたときの処理の下に当たり判定を追加します。
表示された後、ずっと beam (自機の発射したビーム) に触れたかチェックします。
もし beam と当たっていれば
爆発のメッセージを送り、コスチュームを爆発に変更します。
爆発メッセージを送る理由は後ほど説明します。
実行すると次のようになります。
自機が発射したビームが次々と敵を爆発させていきます。
これはこれで爽快感がありますね。
ちなみに、当たり判定をビームではなく敵に入れた理由は
ビームに当たり判定を入れると、どの敵に当たったかを調べる必要が出てくるからです。
調べるのが面倒なので、敵に当たり判定を入れて
「ぼくはビームに当たったので爆発します」
と自分で処理してもらう訳です。
現状ではビームが敵を貫通してしまい、複数の敵を撃破してしまいます。
ここはやはり1発につき1撃破にします。
beam のスクリプトを編集します。
追加したスクリプトは
爆発を受け取ったとき、隠す、スプライトの他のスクリプトを止めるの3つです。
これでビームを停止します。
敵の当たり判定の中で、爆発メッセージを送っていたことを思い出して下さい。
beam に触れたとき送っていたメッセージのことです。
このメッセージ交換で、敵の爆発と同じタイミングでビームを停止させます。
xxxを止めるという処理には次のように3つの選択肢があります。
すべて | ステージ上で動いている全てのスクリプトを止める |
このスクリプト | このスクリプトのみ止める |
スプライトの他のスクリプト | このスクリプトが書かれているスプライトのみ止める |
今回、スプライトの他のスクリプトを使いました。
これで beam に書かれているすべてのスクリプトが停止します。
実行してみましょう。
これで1発のビームで1個の敵をやっつける仕組みになりました。
敵が発射する敵ビームを用意します。
リミックスした人は beamE のスプライトを使います。
コスチュームは2枚用意して、これを切り替え表示することで
インベーダーゲーム風のビームを作ります。
2枚目のコスチュームは、1枚目の絵を左右反転させるだけでOKです。
コスチュームの名前は、beam1 と beam2 にします。
自機がビームを発射する時、自機のxとy座標を取得して表示する位置を決めました。
これは敵のビームも同じで、発射する敵の座標が必要です。
しかし、自機と違って敵は複数存在するため、自機と同じ手法を取ることができません。
そこで敵がビームを発射する時に、どこの位置で発射するのか
座標パラメータを渡す仕組みを作る必要があります。
ちなみに、パラメータとは受け渡しデータのことです。
この仕組みで注目する点は、パラメータ使用中の確認です。
敵は複数いるため、敵ビームが同時に複数クローンされる可能性があります。
パラメータ変数は一組しかないため、同時にいくつも処理できません。
そこでパラメータ変数が使用中なら何もしないといった仕組みを入れます。
3つの変数を作ります。
3つともすべてのスプライト用で作成します。
paraX、paraY が座標、paraF が使用中か確認するための変数です。
敵ビームを発射させるためのスクリプトを作ります。
まず、ビームを発射する側 Gobo のスクリプトを編集します。
移動処理に発射処理を追加します。
paraF が0なら (未使用なら) すぐ1を設定して使用中にします。
その後で、座標を設定しクローンを作ります。
敵ビーム beamE のスクリプトを作ります。
絵を自作した場合は、大きさを適当に調整して下さい。
クローンされた後、パラメータから座標を取得し
未使用の状態に戻します。
コスチューム#には現在のコスチューム番号が入ってます。
1番目なら2番目に設定し、2番目の時は1番目を設定します。
実行してみましょう。
敵からビームが発射されるようになれば成功です。
次回に続きます。