うっほー!ゴッリラだよ!
最近パソコンと睨めっこすることが多くなってきたから、目の疲れをとるために、
電熱式ホットアイマスクを買ってみたんだ!
しばらく使ってみてレビュー記事を書いてみるね!


さて!世間話はこの辺にして、さっそく本題に入るよ!
今回は、GameMakerStudio(以下GMS)を使い、ゲームを作っていく中で
お世話になる、関数(ファンクション)について話していくよ!
初めてこのブログに来たんですけど、GameMakerなんちゃらってなに(。´・ω・)?
っていう人は、まずはこちらの記事をチェックしてみてね!!

1. そもそも関数とは?
一般的な関数の定義は、以下のようなものだよ!
“関数には、入力と出力があり、その出力は入力に関連したものである”
うーん (。-ω´-) ちょっと意味がハッキリしないよね?
GMSにおいて関数は、ゲーム内の何らかの処理をするプログラム内で呼び出される、
小さなプログラムのことだよ!
関数を呼び出す時に、引数と呼ばれる値が必要になるものもあれば、そうでないものもあるんだ!
※引数・・・プログラムや関数に渡す値
関数を自動販売機に例えるなら、こんな感じになるよ!

GameMakerLanguageには、あらかじめ沢山の便利な関数が用意されていて、
関数を自分で宣言することもできるよ!
実際に例を見ながら、理解していこう!
2. 関数の種類
関数についての理解を深めるために、いくつか関数が呼び出されている例を見ていこう!
例に使われている関数は、どれもGMSによってあらかじめ用意されたものを使用しているよ!
関数は、こんな風に呼び出すことができるんだ!
関数名("引数");
例 show_debug_message("これは例だよ");

必要な引数の数は、関数によってそれぞれ違うんだ!
・引数を必要としない関数
まずは、引数を必要としない関数の例を見ていこう!
1 2 3 4 5 |
//引数を必要としない関数の例 instance_destory(); //呼び出されたインスタンスをゲームから削除 room_goto_next(); //次のroom(ゲーム画面)に移る |
instance_destory()という関数は、呼び出された時にそのインスタンスを削除してくれるんだ!
例えば、hpが0になったプレイヤーをゲーム上から削除したいときに使うよ!
room_goto_next()という関数は、呼び出されたときゲーム画面を次に進めてくれるんだ!
例えば、タイトル画面のスタートボタンがクリックされた時、ゲーム画面に進むのに使うんだ!

関数で、引数を必要としないんだ!
・引数を必要とする関数
次に、引数を必要とする関数の例を見ていこう!
1 2 3 4 5 6 7 8 9 10 11 |
//引数を必要とする関数 example1 = 30; example2 = 50; //受け取った引数の中で、一番値の大きいものを返す //いくつでも引数を受け取ることができる max(example1,example2); //指定したレイヤーのx,y座標にオブジェクトのインスタンスを配置する instance_create_layer(x,y,"レイヤー名",オブジェクト名); |
maxという関数は、受け取った引数の中から、一番値の大きいものを返してくれるんだ!
この例では50が返されるよ!maxは、いくつでも引数として受け取ることができるよ!
1 |
largest_value = max(example1,example2) |
こんな風に、関数によって返された値を変数に代入することもできるよ!
二つ目のinstance_create_layerという関数は、引数として座標、レイヤー名、オブジェクトを
受け取って、指定したレイヤーの座標にオブジェクトのインスタンスを配置してくれるんだ!

引数無しで呼び出そうとすると、エラーが起きるから注意してね
・特殊な関数
最後に、特殊な関数を見ていこう!
1 2 3 4 5 6 7 8 9 |
//特殊な関数 player = instance_create_layer(x,y,"example",o_player); instance_destory(); //呼び出されたインスタンスを削除 instance_destroy(o_enemy); //全てのオブジェクトインスタンスを割くy所 instance_destroy(player); //指定したインスタンスを削除 |
さっき紹介したinstance_destro()関数は、ほかのメソッドとは違って、引数として
渡す値によって処理が変わってくるんだ!
- <引数を渡さずに呼び出す>
関数を呼び出したインスタンスを削除する - <オブジェクト名を引数として呼び出す>
ゲーム上に存在する、指定したオブジェクトのインスタンスを全て削除するよ! - <オブジェクトのインスタンスidを引数として呼び出す>
そのidを持った、インスタンスのみを削除するよ!
instance_destroy()のように、引数として渡した値のタイプによって
処理が変わる関数は、ほかにもいくつかあるよ!呼び出すときは注意してね!
3. 変数の宣言方法
関数についての理解を深めたところで、実際に関数を宣言してみよう!
まずは、GMSを開いてスクリプトと呼ばれるものを作成してね!
画面右Resources内のScriptsを右クリック → Create Scriptを選択

作成したScriptを選択した状態で、F2キーを押すと名前を変更できるよ!
(return_smallerと名付けよう)
今回は、引数として受け取った二つの値を比べて、小さい方を返す処理を
してくれる関数を宣言してみよう!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
///@argument0 number1 ///@argument1 number2 var number1 = argument0; //引数として受け取った1つめの値 var number2 = argument1; //引数として受け取った2つめの値 //値1のほうが大きい、または同じ場合 //値2を返す if(number1 >= number2) { return number2; } //それ以外の場合は値1を返す else { return number1; } |
大丈夫!一文づつ説明するから安心してね!(・ω・´)
最初の///@argumentは、引数の数と内容を表示させるために使うんだ!
これが無くてもエラーは起きないけど、合ったほうがわかりやすいから、
毎回書くことをお勧めするよ!
1 2 |
var number1 = argument0; //引数として受け取った1つめの値 var number2 = argument1; //引数として受け取った2つめの値 |
ここでは、ローカル変数に引数として受け取った値を代入しているんだ!
プログラミングでは0から数えるので、一つ目の引数はargument0になるよ!
1 2 3 4 5 6 7 8 9 10 11 12 |
//値1のほうが大きい、または同じ場合 //値2を返す if(number1 >= number2) { return number2; } //それ以外の場合は値1を返す else { return number1; } |
このIF文は、受け取った2つの引数の値を比べて、低い方を返すように処理しているよ!
IF文のことは既に別の記事で紹介しているので、わからない人は是非読んでみてね!

何かほかにしたい処理があれば、returnの前に書いておこう!
実際に、このプログラムを実行してみよう!
オブジェクトを作成して、Create Event内でreturn_smaller関数を呼び出してみよう!

show_debug_messageは、引数として渡した値をコンソールに出力してくれる関数だよ!
ここでは、return_smallerによって返された値を引数として渡しているんだ!
つまりreturn_smallerがしっかり働いていたら、小さい方の値である1が表示されるはずだよ!
オブジェクトをroomに配置して、ゲームを実行してみよう!

画像のように、小さい方の値が出力されていれば成功だよ!
まとめ
お疲れ様!これで関数についての説明はおしまいだよ!
何度も繰り返す処理を関数として宣言しておくことで、作業を効率化できるから、
関数はしっかり理解しておこう!GMSが用意してくれている関数は、
便利なものが多いからチェックしておくことをお勧めするよ!
この記事を通して、少しでも皆が新しいことを学ぶことができたら嬉しいな(*’▽’)
質問があればいつでも@hellomanakiで待ってるよ!
また次の記事で会えることを楽しみにしているよ!
