![見出し画像](https://assets.st-note.com/production/uploads/images/113360303/rectangle_large_type_2_0aef0d0cce867f04d56a1a4e12fb5948.png?width=1200)
【StoneStoryRPG/Stonescript】7.カスタム関数
カスタム関数は、スクリプト内の処理を分割整理することで、読みやすく・使いやすくするために使われます。
関数は、宣言されただけでは実行されず、後で関数が呼び出された時に実行されます。
例1 関数の宣言方法
関数は「func [関数名]()」の形で宣言し、次のインデントされた行から
関数の処理内容を記入します。
補足:関数名は基本的に大文字から始めるのが通例です。
//毎フレーム1ずつ増加するカウンターを作成する
//beginに設定されたキーが入力されると、カウンターの値は0にリセットされる
var count = 0
count++
>カウンター = @count@
func ResetCounter()
count = 0
?key=begin
ResetCounter()
変数countを宣言し、0を格納する
countに1増加させた値を格納する
画面上に「カウンター = [count]」と表示する
関数ResetCounterを宣言する、内容は以下
┗ countに0を格納する
もしkeyがbeginなら?
┗ ResetCounterを実行する
【宣言】
func ResetCounter()
<実行> ↑
ResetCounter()
【呼び出し】
例2 返り値(戻り値)
関数は、処理を行うだけでなく、処理を行って得られた値(返り値)を別の処理で使用することができます。
関数が値を返すようにするためには、関数内の最後に「return [返したい値]」を使用します。returnに到達したら、この関数の処理は終了します。
返り値を他の処理で使用する場合は、「[関数名]()」を使用します。変数を使う時と同じように使えます。
//非ボスステージにかかった時間をボスステージで表示する
func NonBossDuration()
return totalTime - time
var duration
duration = NonBossDuration()
>かかった時間: @duration@
関数NonBossDurationを宣言する。内容は以下
┗ [totaltime] - [time] の答えを返して関数終了
変数durationを宣言する
durationにNonBossDurationの返り値を格納する
画面上に「かかった時間: [duration]」と表示する
【宣言】
func NonBossDuration()
<実行> ↑ ↓ <値を返す>
NonBossDuration()
【呼び出し】
例3 引数
他の処理内で求めた値を関数内で使用したい場合は、関数を宣言する時に「func [関数名]([引数])」を使います。引数は複数使用することもできます。
関数を使用する際は、「func [関数名]([値])」の形で使用します。
//5から10の範囲内での乱数を生成する
func RandomRange(min, max)
?min >= max
return min
return min + rng % (max - min + 1)
var randomValue
randomValue = RandomRange(5, 10)
>乱数: @randomValue@
変数minとmaxを引数に持つ関数RandomRangeを宣言する。内容は以下
┣ もし[min]が[max]以上なら?
┗[min]を返して関数終了
┗ [min]~[max]の乱数を返して関数終了 ※
変数randomValueを宣言する
randomValueに、RandomRangeに(min=5,max=10)を代入した時の返り値を格納する
画面上に「乱数: [randomValue]」と表示する
【宣言】
func RandomRange(min, max)
<値を代入して実行> ↑ ↓ <値を返す>
RandomRange(5, 10)
【呼び出し】
例4 this
関数内と関数外に同じ名前の変数が定義されている場合は、「this」をつけることで、関数外の変数を使用できます。
基本的に、別々の名前を付けている場合は、thisについて考える必要はありません。便宜上、変数名が同じになってしまう場合はthisの出番です。
var a = 1
func TestScope(a)
>スクリプト内でのa = @this.a@, 関数内でのa = @a@
TestScope(3)
変数aを宣言し、1を格納する
変数aを引数にもつ関数TestScopeを宣言する。内容は以下 ※
┗ 画面上に「スクリプト内でのa = [スクリプト内でのa], 関数内でのa = [a]」と表示する
TestScopeに(a=3)を代入して実行する
なので、TestScopeに(a=3)を代入しても、最初に宣言したaの値は1のままです。
補足1:関数のイメージを図にしてみたよ。
![](https://assets.st-note.com/img/1692017868894-e8kmNG7PIx.png?width=1200)
補足2:関数はゲームが閉じられるまでに216個以上呼び出されるとエラーを吐きます。
(次回更新送れるかも)