スクリプト/はじめてのRmakeスクリプト / 第05回 通常変数をマスターしよう(履歴ID:270)
最終投稿者: aoihikawa
更新:2012/06/19 09:07:55
はじめてのRmakeスクリプト
第05回 通常変数をマスターしよう
こんにちは 簸川 葵(ひかわ あおい)と申します
こんにちは 剣 芽優(つるぎ めゆ)です
この連載ではスクリプトの基礎を、じっくりとお話していきます
分からないところがあったら、過去の記事を確認よ
05-01 変数の種類
前回では配列変数についてお話しました
今回は、『変数の種類』についてお話します
変数にも種類があるの?
これまでに使用してきた変数は『ローカル変数』といいます
『ローカル変数』はシンプルで扱いやすい変数なのですが、
RPG系では各イベント、ノベルでは各シーンが終了すると
ローカル変数とその内容は消えてしまうという難点があります
それじゃあ、あるイベントでポイントをもらって、
別のイベントでポイントをアイテムと交換してもらう
っていうことはできないのね・・・
そこで『通常変数』というものを使います
『通常変数』はRPG系の各イベント、ノベルの各シーンが終了しても
引き続き、値を保持しておくことができます
RmakeではsetVariable関数、getVariable関数を使うことで、『通常変数』を実装できます
#通常変数「e」に、数値「7」を入れる setVariable("e", 7) #ローカル変数「x」に、通常変数「e」の中身を入れる x = getVariable("e") #通常変数「e」に、通常変数「e」の中身と数値「1」を足した結果を上書きする setVariable("e", getVariable("e") + 1) #通常変数「e」の中身を表示する speak(getVariable("e")) #通常変数「v」に、文字列「鉄の剣」を入れる setVariable("v", "鉄の剣") #通常変数「v」の中身を表示する speak(getVariable("v"))
関数を使っているため、ローカル変数と見た目は異なりますが
動きとしては同じものになります
setVariable関数は、変数名の文字列と入れたい値を関数に渡していて、
getVariable関数は、変数名の文字列を関数に渡しているのね
変数名の指定が文字列なので、「"」で囲む必要があるところに気をつけてください
setVariable関数の中に、getVariable関数が入っていたり、
speak関数の中に、getVariable関数が入っているところがあるわ
関数の中に関数がある場合、中の関数が先に実行されます
ここでは、getVariable関数で通常変数の中身が取り出された後、
その値がsetVariable関数によって通常変数に入れられたり、
その値がspeak関数によって表示される、という流れになります
戻り値をそのまま次の関数に渡しているわけね
05-02 通常変数とフラグ
フラグであるブーリアンを通常変数で使うときは
setVariable関数やgetVariable関数ではなく、setFlag関数とgetFlag関数を使います
関数がいっぱい増えてきて、ちょっとややこしいかも・・・
大丈夫 使い方はsetVariable関数やgetVariable関数と同じです
#通常変数「f」に、ブーリアン「true」を入れる setFlag("f", true) #通常変数「f」の中身を表示する speak(getFlag("f")) #通常変数「f」の内容を元に分岐する if getFlag("f") #通常変数「f」が「true」の場合 speak("条件達成") end
本当に使い方はそのままで、関数名がsetFlagやgetFlagに変わるのね
でも、ブーリアンだとsetVariable関数やgetVariable関数は使えないの?
問題なく使えますが、何も入っていない時の内容が異なります
何も入っていないとき・・・?
setVariable関数を使う前に、getVariable関数を使った場合、
それと、setFlag関数を使う前に、getFlag関数を使った場合です
#setVariableされていない、通常変数の中身を表示する speak(getVariable("e")) #setFlagされていない、通常変数の中身を表示する speak(getFlag("f"))
ひとつめは「NULL」って表示されたけど、ふたつめは「false」って表示されたわ
if文などの条件として値が必要なとき、
getFlag関数ならそれより前にsetFlag関数を使っていなくても
すぐに使うことができるわけです
RPG系のイベントで使うことがある「有効条件」にもすぐに使えるわけね
05-03 通常変数と配列
通常変数も、配列を使うことができます
配列というと、createArray関数だったっけ
そうですね 実際にスクリプトをみてみましょう
#「e」という名前の通常変数に、配列を用意する setVariable("e", createArray()) #「e」という名前の配列通常変数の0番目に、数値「10」を入れる getVariable("e")[0] = 10 #「e」という名前の配列通常変数の1番目に、数値「11」を入れる getVariable("e")[1] = 11 #「e」という名前の配列通常変数の2番目に、数値「12」を入れる getVariable("e")[2] = 12 #「e」という名前の配列通常変数の2番目を表示する speak(getVariable("e")[2])
変数に配列を用意したときのように、
setVariable関数にcreateArray関数が入る形になるのね
配列の番号は通常変数の後に「[番号]」がつくようになります
配列通常変数は値を入れるときに、setVariable関数を使わないの?
良いところに気がつきましたね
createArray関数は配列のベースを用意する関数です
つまりこの場合、通常変数「e」には配列のベースが入っているわけです
そのベースをgetVariable関数で取得した後、配列の指定番号に値を入れるため
ローカル変数のような「=」を使う形になるのです
だから配列通常変数の場合、getVariable関数と番号で値を入れる形になるのね
05-04 第05回 まとめ問題集
それでは、今回のまとめ問題です
よーっし がんばるよ
なお、回答は記載しておりません
スクリプトをコピーして、実際に動作させることでチェックしてください
問題01
次のスクリプトに実行結果が「銀の剣」と表示されるよう、1行を追加してください
#ここに追加する speak(getVariable("v"))
問題02
次のスクリプトに実行結果が「2」と表示されるよう、1行を追加してください
setVariable("e", 0) if getFlag("f") setVariable("e", getVariable("e") + 1) #ここに追加する setVariable("e", getVariable("e") + 2) end speak(getVariable("e"))
問題03
次のスクリプトに通常変数「e」を使用して実行結果が「5」と表示されるよう、2行を追加してください
setVariable("e", createArray()) #ここに追加する speak(x)
できた! これで別々のイベントでもばっちりね
なお、理解したかどうかの確認なので、コメントに回答を書かないでください
<連載一覧>
第01回 変数と数値をマスターしよう
第02回 変数と文字列をマスターしよう
第03回 変数とフラグをマスターしよう
第04回 配列変数をマスターしよう
第05回 通常変数をマスターしよう
第06回 数値の応用をマスターしよう
第07回 時間の動作をマスターしよう
第08回 ユーザ定義関数をマスターしよう
第09回 スクリプト用語のまとめ