うっほー!ゴッリラだよ!
なんと今日、、、おいら住んでいる地域の気温が-2度だったんだ(´・ω・`)
まったくもう!!寒すぎて冬眠するか悩んだよ(´・ω・`)


そ、そんなことはさておき!
今日からさっそくGameMaker Studio(以下GMS)を使って、ゲームを作り始めていくよ!
初めてこのブログに来たんですけど、まずGameMakerなんちゃらってなに(。´・ω・)?
っていう人は、まずはこちらの記事をチェックしてみてね!!
GameMakerStudioには、初心者の人向けに公式が用意した
素晴らしいチュートリアルがあるよ!
ただ、残念なことに日本語には対応していないんだ(´・ω・`)
動画自体は凄く役に立つ動画なのに、日本語に対応してないし使えない(´;ω;`)
っていうのはもったいないから、今回は僕がそのチュートリアルを翻訳しながら
解説していくよ!!
私英語できでるきんだよね(`・ω´・) ( ゚∀゚)アハハという人は公式の動画をチェック!
それではさっそくはじめよう!今回はこんな感じのアステロイド風ゲームを作っていくよ!


1. プロジェクトを作ろう!
さっそくGMSを起動して、プロジェクトを作成しよう!
以下の手順で作成するよ!
NEWをクリック → GameMakerLanguageを選択 → ファイル名(今回はSpaceShooter)を入力

プロジェクトを作成したら、次にゲームのウィンドウサイズを変えよう!
画面右側のRoomをクリック → 左下のProperties内のWidth, Height 欄に500を入力

次に、ゲームのフレームレートを60fpsに設定しよう!
fpsはゲーム画面が毎秒更新される回数のことで、最近のゲームは大体60fpsになっているよ!
画面上の歯車マークをクリック → General内のGame frames per secondを60に変更

これでプロジェクトの設定は完了だよ!早速ゲームを作り始めよう!
2. プレイヤーを作ろう!
ゲームの設定もできたところで、さっそくゲームの主役となるプレイヤーを作成していこう!
今回、プレイヤーは隕石を破壊する宇宙船君だよ!


・プレイヤーSpriteを読み込もう
プレイヤーオブジェクトの作成に取り込む前に、まずはSpriteを作成しよう!
画面右Resource内のSpritesを右クリック → Create Sprite

空のスプライトが作成されたら

①Spriteの名前を、後で呼び出しやすいように”s_player“に変更しよう!
名前は自分でわかるなら何でもいいよ!
②Importをクリックして、プレイヤーのSpriteを読み込もう(*’▽’)
自分で用意したスプライトを使いたい人はそれを選択してね!
③原点の位置をMiddle Centerに変更しよう!
GMSでは、原点の位置を起点に物体が動くんだ!
例えば原点が左上にあって物体を回転させると、こんな風に左上を起点に回転するよ!

原点が真ん中にある場合こうなるよ!

今回は原点が真ん中にある方が、自然に見えるよね!
原点は大体真ん中に設定するけど、Spriteによって変わってくるから注意してね!
・プレイヤーのオブジェクトを作成しよう
次に、プレイヤーのオブジェクトを作成しよう!
画面右Resource内のObjectsを右クリック → Create Objectを選択

空のオブジェクトが作成されたら

①オブジェクトの名前を変更しよう!
Spriteと同様に、自分がわかるならどんな名前でもいいよ!
②プレイヤーオブジェクトのSpriteを設定しよう!
…をクリックすると選択画面がでてくるので、さっき作成したプレイヤーSpriteを選ぼう!
③Add EventをクリックしてCreate Eventを選択しよう!
Create Eventではインスタンス変数を宣言するよ!
(インスタンス変数についてはこちらの記事をチェック)
さっそくmoveSpeed,rotateSpeedという変数を宣言しよう!
1 2 3 4 5 6 7 |
//o_player CreateEvent //プレイヤーの移動速度 moveSpeed = 0.05; //プレイヤーの回転速度 rotateSpeed = 5; |
次に、もう一度Add EventをクリックしてStep Eventを追加しよう!
Step Eventに記述したプログラムは、毎フレーム実行されるんだ!
Event内に以下のプログラムを記述しよう!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
//o_player StepEvent if(keyboard_check(vk_right)) { image_angle-=rotateSpeed; } if(keyboard_check(vk_left)) { image_angle+=rotateSpeed; } if(keyboard_check(vk_up)) { motion_add(image_angle,moveSpeed); } move_wrap(true,true,sprite_width); |
GameMakerLanguage(以下GML)では、キーボード入力を受け取る時に、
keyboard_check(入力を受け取りたいキー)というメソッドを使うよ!
このメソッドでは、指定したキーが押されている間、1(True)の値を返すんだ!
つまり、一番最初のif文では右矢印キーが押されている間、組み込み変数のimage_angleから
5の値を引いているんだ!
1 2 3 4 5 |
if(keyboard_check(vk_right)) { // -=はimage_angle = image_angle - rotateSpeedを略した記述法だよ! image_angle-=rotateSpeed; //プレイヤーを右に回転 } |
image_angleは、プレイヤーの向きを管理している、組み込み変数の一つで
値が足されると左に、引かれると右に回転するよ!
つまりこの場合は、値が引かれているので右に回転するんだ!
2つめのif文は、左矢印キーが押されている間、image_angleに5を足してしているんだ!
1 2 3 4 5 |
if(keyboard_check(vk_left)) { // +=はimage_angle = image_angle + rotateSpeedを略した記述法だよ! image_angle+=rotateSpeed; //プレイヤーを左に回転 } |
つまり左矢印キーが押されている間、プレイヤーを左に回転させるっていうことだね!
3つめのif文では、上矢印キーが押されているかどうかを確認しているよ!
1 2 3 4 |
if(keyboard_check(vk_up)) { motion_add(image_angle,moveSpeed); } |
上矢印が押されている間は、motion_addというメソッドを使って、
プレイヤーを移動させているんだ!
飛行船が直進するとき、いきなりフルスピードで進まず、徐々に加速して進んでいくよね?
motion_addは、引数として受け取った”方向”と”速度”からプレイヤーの移動速度と方向を
計算、適応してくれるのがmotion_addメソッドなんだ!

プレイヤーを動かしてくれる便利なメソッドくらいの認識で大丈夫だよ!
1 2 |
//プレイヤーが画面外に飛び出したときに反対側にワープさせる move_wrap(true,true,sprite_width/2); |
反対の画面にワープするように設定してくれるメソッドのことだよ!

move_wrapメソッドは3つの引数を受け取るんだ!
最初の二つは左右、上下に設定を適応するかどうかをTrue/Falseで、3つめは
どれだけ画面外に出たときに、ワープしてほしいのかを数値で受け取っているよ!
今回の場合はSpriteの横幅である、組み込み変数のimage_widthを値として渡しているんだ!
・プレイヤーをテストしてみよう!
これでプレイヤーの動きの処理は完成したよ!実際にゲームを実行して、確認してみよう!
ゲームを実行する前に、プレイヤーインスタンスを画面に配置しておこう!
画面右にあるResource内のRoomsをクリック → room0を選択 → Objects内のo_playerを
room内にドラッグアンドドロップ

プレイヤーを画面に設置出来たら、ゲームを起動してテストしてみよう!
F5または、画面左上の”▷”マークをクリック
しばらくするとゲーム画面が出てくると思うよ!左右、上の矢印キーを押してプレイヤーが
自分の思い通りの動きをしているか確認してみてね!

画像の通り動いていたら成功だよ!
何かエラーが起きたら、コードを打ち間違えていないか確認してみてね!
質問があればいつでも@hellomanaki大歓迎だよ!
まとめ
今回は区切りが良いのでここまでにしておくよ!
このチュートリアル解説は長くなりそうなので、数パートに分けてやっていくね!
パート②はこちら!
あと、ここで作業を中断する場合はプロジェクト保存を忘れないでね!
Control + S または 画面上のFileをクリック → Save Projectを選択してね!

YouTubeでも解説動画を投稿しているから、チェックしてみてね!(*’▽’)

英語が読めないので、非常にありがたいです。