うっほー!ゴッリラだよ!
最近チョコレートが美味しすぎて、手がとまらないよ(゚д゚)ウマ~
鼻血による出血多量には気を付けるね…(´-ω-)


さて!今回は、アステロイド風ゲームの続きを作っていくよ!
まだパート1やってないよ!っていう人は、先にそっちを終わらせてから戻ってきてね!
画像素材をまだダウンロードしていない人はこちらから!
3. 隕石を作成しよう!
プレイヤーの次は、今回のゲームの敵になる隕石を作成していこう!
今回は3種類の隕石を用意したよ!

・隕石Spriteを読み込もう
プレイヤーのSpriteを読み込んだ時と同じ手順で、隕石のSpriteを読み込もう!
今回、隕石のSpriteは3つ用意されているから、3つSpriteを作成してね!
画面右Resource内のSpritesを右クリック → Create Sprite → Importで画像を読み込み



名前を変更するのと、原点をMiddle Centerに変更するのを忘れないでね!
・隕石オブジェクトを作成しよう!
次に、隕石オブジェクトを作成しよう!
サイズが違うだけの隕石オブジェクトを3つ作るのは効率が悪いから、
今回は一つだけオブジェクトを作成して、プログラムでSpriteを変更するようにするよ!
画面右Resource内のObjectを右クリック → Create Objectを選択

①オブジェクトの名前を変更しよう!
自分で分かるならどんな名前でもいいよ!(おすすめはo_asteroid)
②プレイヤーオブジェクトのSpriteを設定しよう!
…をクリックすると選択画面がでてくるので、小惑星のSpriteを選択しよう
・Create Eventを追加しよう
③Add Eventをクリックして、Create Eventを追加しよう!

最初に呼び出されるイベントの事だよ!
さっそく後で使うことになる、インスタンス変数を宣言していこう!
1 2 3 4 5 6 7 8 9 10 11 |
//隕石のspriteを3つの中からランダムに選択 sprite_index = choose(s_asteroid_s,s_asteroid_m,s_asteroid_l); //進行方向をランダムに設定 direction = irandom_range(0,359); //Spriteの向きをランダムに設定 image_angle = irandom_range(0,359); //隕石の移動速度 speed = 1; |
少しややこしく見えるかもしれないけど、一行ずつ説明するから!

1 2 |
//隕石のspriteを3つの中からランダムに選択 sprite_index = choose(s_asteroid_s,s_asteroid_m,s_asteroid_l); |
ここではchoose関数を使うことで、隕石インスタンスのSpriteを3つの中から
ランダムに選択するようにしているんだ!
sprite_indexは、組み込み変数の1つでSpriteを値として保持するよ!
choose関数は、渡された選択肢の中から1つを戻り値として返すんだ!
1 2 |
//進行方向をランダムに設定 direction = irandom_range(0,359); |
この行では、進行方向を管理する組み込み変数directionの値をランダムに設定しているんだ!
irandom_range(値1,値2)は、値1~値2の範囲からランダムな値を戻り値として返すよ!
1 2 |
//Spriteの向きをランダムに設定 image_angle = irandom_range(0,359); |
ここでは、隕石Spriteの角度をランダムな方向に設定しているよ!
こうすることで、隕石が全て同じように見えないようにしているんだ!
1 2 |
//隕石の移動速度 speed = 1; |
最後は、隕石が移動する速度を設定しているんだ!
インスタンスはdirectionの方向に、毎フレームspeedの値進むよ!
つまり、一つ一つの隕石が全てランダムな進行方向、向きをもって生成されるということだね!
・Step Eventを追加しよう!
④Add Eventをクリックして、Step Eventを追加しよう!
Step Event内に以下のコードを記述してね!
1 2 3 4 5 |
//画面外に飛び出した時反対方向から登場 move_wrap(true,true,sprite_width); //隕石を回転 image_angle = image_angle+1; |
move_wrap関数は、パート①でも紹介したようにインスタンスが画面外に飛び出した時、
反対画面から登場させてくれるよ!
1 |
image_angle = image_angle + 1; |
ここでは、spriteの角度を管理するimage_angleに毎フレーム1の値を足しているよ!
つまり1秒間にspriteを60度回転させているということだよ!

・隕石をテストしてみよう!
これで隕石の動きの処理は完成したよ!実際にゲームを実行して、確認してみよう!
まずは、隕石インスタンスを画面に配置してね!
画面右にあるResource内のRoomsをクリック → room0を選択 → Objects内のo_asteroidを
room内にドラッグアンドドロップ
Spriteがランダムに割り当てられていることを確認したいので、5つくらい置いてみてね!
配置したいオブジェクトを選択したい状態で、altキーを長押しすることで連続で配置できるよ!

隕石を画面に配置出来たら、ゲームを実行してみよう!
F5または、画面左上の”▷”マークをクリック


画像のように動いていたら成功だよ!
何かエラーが起きていたら、コードに打ち間違いがないか確認してみてね!
質問があればいつでも@hellomanaki大歓迎だよ!
まとめ
区切りが良いので、今回はここまでにしておくね!
次回は、プレイヤーから弾を発射する機能を実装するつもりだよ!

ここで作業を中断する場合は、プロジェクト保存を忘れないでね!
Control + S または 画面上のFileをクリック → Save Projectを選択


ゲームを実行してもゲームが起動しません。、、、
コードの打ち間違えでは無いと思うんですけど、、
何か対処法などはありますか?
コメントありがとうございます!
ゲームを起動した時にエラーメッセージが表示されると思うので、それを送っていただけますか?
エラーメッセージについてはこちらの記事が役に立つと思います!(*゚▽゚)
https://hellomanaki.com/gamemakerstudio-errormessages/