Hello world!
この記事は
Scratchでシューティングゲームを作ろう!【1】
Scratchでシューティングゲームを作ろう!【2】を読んだ人向けです。
前回の記事
今回は、シューティングゲームをより面白くするために下記の項目についてお話していきます。
・敵に弾を発射させる
・弾幕の種類を増やす
算数やその延長上にある数学的な話も出てくるので難しいですが頑張っていきましょう。
それではいってみよう!
今までは単に敵機が下方向へ進んでいくだけで、自分が撃たれるということはありませんでした。それではあまりにも難易度が低すぎる!!
ということで敵が弾を撃ってくるようにしましょう。
さらには、弾幕の種類を増やしていきましょう!
(中学、高校の学習内容を含むので内容を完璧に理解しようとする必要はありません)
手始めに真っすぐ下方向に弾が飛んでいくようにしましょう。
まず敵機のスプライトを選択し、スクリプトエリアを表示させましょう。
そこに次のブロックを追加します。
新しい変数を2つ作っています。それぞれ最初に用意しておきましょう。
ここでは主に、現在の敵機のx座標を変数”弾x座標”に、y座標を変数”弾y座標”に入れ込み、弾2(敵が発射する弾)のクローンを作っています。
その他の”~秒間待つ”ブロックは敵が弾を撃ってくる間隔を調整する働きをしています。
画像の通りにすると、敵機が画面に登場した0.5秒後に1発目が放たれ、その後2.5秒おきに合計3つの弾が発射されることになります。
次に弾2のスプライトを選択し、スクリプトエリアに次のブロックを追加してみましょう。
これは敵機が弾2をクローンさせると動き出すプログラムです。
弾の初期位置を”弾x座標”、”弾y座標”にして、そこから画面端、もしくは自機に触れるまでy座標の値を減らし続けます。
ここでいう”弾x座標”、”弾y座標”はゲーム画面に映る敵機の座標です。
動画のように動いていたら完成です。
では真っすぐに飛んでいく弾のプログラムを応用して扇型に弾が飛んでいくような弾幕を作ってみましょう。
拡散する弾は先ほどの敵機とは別のキャラクターから出したいので敵機のスプライトを右クリックして複製し、色を変えるなどして見分けられるようにしましょう。また、拡散する用の弾を自分の好きなように描いて、名前を付けましょう。(ここでは拡散球にしました。)
複製した敵機のスクリプトエリアを開いた後画像のところだけ変更しましょう。
(過去のものとは違いますが、修正しただけなので赤丸部分だけ注意すれば大丈夫です。)
①ではもともと弾のクローンを作るところでしたが、メッセージ1を送るようにしています。
②では拡散する弾を撃ってくる敵の出撃頻度を下げています。
ここまでできましたか??
できたら拡散球のスクリプトエリアを開き次のスクリプトを追加しましょう。
新しい変数”拡散球x座標”、”拡散球y座標”、”拡散球の角度”を追加しています。変数”拡散球の角度”を作る際には下図のように
「このスプライトのみ」のチェックを入れておいてください。
これはグローバル関数とローカル関数の切り替えですが今はそこまで深く考える必要はありません。
話をスクリプトに戻すと、メッセージ1を受け取った際、向きが20度ずつずれた6個の自身のクローンを作り出します。
クローンが作られるごとに”拡散球の角度”の方向に、画面端もしくは自機にあたるまで真っすぐ飛んでいくことになっています。
なので「~歩動かす」ブロックの値を大きくすれば弾がすばやく
”拡散球の角度”の値を大きくすれば広がりがより大きくなります。
実際の動きはこちら
次に敵からの弾がこちらを狙って飛んでくるようにしてみよう。
言葉だけだと分かりずらいので、まず実際の動きを見てみましょう。
では具体的なスクリプトについてみてみましょう。
数学的な知識が必要なので難しいと感じる人はこれを使えばそんなことができるんだ……程度分かれば十分です。
次のスクリプトを真っすぐに飛んでいく弾のスクリプトの代わりにおきます。
”自機と敵機の差x”、”自機と敵機の差y”を新しい変数として宣言しています。
どちらも「このスプライトのみ」のチェックを忘れずに。
最初にこのスクリプトでは弾と自機のx座標・y座標の差を保存しています。その値からatan(アークタンジェントという関数)を使って進むべき角度を求めています。
その後atanで求まった向きに向かって端に触れるもしくは自機に触れるまで6歩ずつ進むという記述がされています。
下の図で説明すると
求められる角度 = arctan( 自機と敵機の差x ÷ 自機と敵機の差y )
いかがだったでしょうか?
今回の内容はだいぶ難しかったと思います。arctanに関しては高校数学レベル(もしくはそれ以上)の知識です。
10なら10すべてを無理に理解しようとせず、自分のできる範囲で楽しく学んでいきましょう。
今回も最後まで読んでいただきありがとうございました。^ ^
Leave a Comment