弾幕の画像

シューティングゲームなどで使われる弾幕の作り方についての説明をします。

ここでは、キーが押されたら弾幕が発射されるプログラムを作ります。

クローンを作成

360度すべての方向に10個の弾を飛ばすのであれば、
その1つ毎の弾の角度は360度÷10個で36度。

36度の角度の画像

スプライトとなる弾を36度ずつ方向を変えてクローンをつくります。

クローン作成のスクリプト

クローンされた時は同じ場所で弾が回転するだけなので、
クローンが作られていることが分かりにくいです。

渦巻きみたいな弾幕

下の動画はクローンされた後に、36度ずつ変えた角度に2歩ずつ動いています。

螺旋弾幕の動画

生徒さんA生徒さんA

クローンされた順番に動くから渦巻きみたいじゃない?

生徒さんA生徒さんA

同じタイミングで広がるようにできないかな?

放射線状に同じタイミングで発射

クローンされた弾が、同じタイミングで動きだせば良いので、
その方法を2つばかり紹介します。

放射状に動く弾幕の動画

これから紹介する2つの方法で、同じタイミングで弾を発射することができました。

クローン作成終了のタイミングを変数で調整する

1つ目の方法は、スペースキーを押してクローンを10個作りますが、
クローンを作り終えたら、変数(セット終了)を1に変えるようにしておきます。

クローンされた弾は、セット終了の変数が0から1になるまで動かずに待っています。
変数が1になってからすべてのクローンが一緒に動きだすので、同じタイミングで弾は放射状に動きだします。

クローン作成終了を確認する変数

ただし、この方法でも渦巻き状になってしまう事があります。

セット終了=1の情報をクローンが受取った後、クローン作成の順番通りに動きだすことから、
10個のクローン作成が実際には終わり切ってない時に渦巻き状になるかと考えてます。

0.5秒待つのブロックを入れたスクリプト

0.5秒待つのブロックを入れる事によって問題は解消されますが、
0.5秒間の処理時間を必要としますので、次で説明をする
定義ブロックを使う方法がベストです

*上のスクリプトにはこの記事の最後にある、変数のブロックが含まれています。

 

定義ブロックの”再描画せずに実行する”のオプションを使う

2つ目の方法は、上向きキーを押すとクローンを作るスクリプトを定義ブロックで作ります。

でも、普通に定義ブロックで作ってもダメなので、
オプションの話を読んでくださいね。

定義ブロックでクローン作成を作るスクリプト

定義ブロックを作る時に、”画面を再描画せずに実行する” チェックします

これをチェックすると、定義ブロックで作ったプログラムの最終形が一瞬で出てきます
そのために、10個のクローンが同時に出来上がる感じになります。

定義ブロック作成の画面にあるオプション

キー連打でクローンのクローンができてしまう

別の記事で紹介をしていたようにイベントキー(ここではスペースキーや矢印キー)のブロックは
オリジナルとクローンの両方のスプライトに指示を出します

そのため、イベントキーの下でクローン作成の指示をした場合、
画面上にあるすべてのスプライトのクローンが作られてしまいます。↓↓詳しい記事はこちら

よって、下の動画のようにそれぞれの弾のクローンが作られますね。

クローンのクローンが出来る動画

解決方法1:他のスプライトでクローンを作る

 

クローンが大量にできてしまうの記事で紹介したように、
ダミーの他のスプライトで弾のクローンを作れば解決しそうです。

リンゴでボールのクローンを作るスクリプト

タイミングに合わせてボールを回転させるスクリプト

下向きキーを押したら、
リンゴのスプライトで弾のクローン作成を10回、
ボールは36度ずつ10回転させています。

リンゴのスプライトでボールのクローンを作る画像

出来てはいますが、タイミングが合っていないのか、
動きが良くないですね。

解決方法2:変数をつかってクローンOKを判断させる

最後に一番よいと思うやり方を説明しますね。

弾(ボール)のスプライトで、定義ブロックを使ったスクリプトです。

変数でクローンをコントロールするスクリプト

変数名はクローンという名前にしています。

ここでの変数は下図にあるように、このスプライトのみをチェックします。
これはローカル変数といって、このスプライトのオリジナルやクローンに
いろいろな変数を割り当てる事ができます

ローカル変数の作り方の画像

 

上のスクリプトの意味

オリジナルのスプライトは: 変数クローンをyesにする

クローンのスプライトは: 変数クローンをnoにする

両方のスプライトへの命令は: 変数クローン=yesなら自分のクローンを作る

これで、オリジナルの弾だけがクローンされるので、大量のクローン作成にはなりません。

 

生徒さんA生徒さんA

この方法が一番良さそうだね

弾幕の作り方のベストな方法

渦巻きの場合は、弾のクローン作成後の動くタイミングがクローン作成の順番通りのままで良い。

放射状にする場合は、クローン作成後に同じタイミングで動いて欲しいので定義ブロックを使い、再描画せず実行のオプションを忘れない

弾幕をキーで連打する場合、変数でオリジナルスプライトだけをクローンするようにしてクローンの大量発生をふせぐ。

スクラッチのサイトをクリックして、それぞれの動きを試してみてください。

スペースキー:変数で弾の発射タイミングを合わせたプログラム
下向きキー:リンゴのスプライトで弾のクローンを作るプログラム
上向きキー:定義ブロックを使用したプログラム