set_variables タグでは、一つの変数に複数の値を格納できますが、その使い方がちょっと面倒なので、いくつか例示しながら説明していきます。
なお、「配列」とか「ハッシュ(連想配列)」の細かい説明は省きます。
「配列」のように使う
「配列」は変数の中に、各要素を順番に格納したものです。
例えば、enemy という変数に「オーク」、「兵卒」、「たいしたことない」という3つの要素を格納したいときには、次のように記述します。
[set_variables]
name=enemy
[value]
x="オーク" #「x」は他の文字列でも構いませんが、以下の[value]すべて同じ文字列にします。
[/value]
[value]
x="兵卒"
[/value]
[value]
x="たいしたことないな"
[/value]
[/set_variables]
[value] は各要素ごとに作ります。
こうすることで、enemy の中身はこうなってます。
"オーク", "兵卒", "たいしたことないな"
↑0番目の要素 ↑1番目の要素 ↑2番目の要素
注意すべきは、要素が「0番目」から始まっていることです。
enemy のそれぞれの要素の呼び出し方は次にようになります。
$enemy[0].x -> "オーク"
$enemy[1].x -> "兵卒"
$enemy[2].x -> "たいしたことないな"
まず、通常の変数の呼び出し同様に先頭に「$」をつけます。
そして、変数名enemyの後ろの[]内に要素の番号を入れます(繰り返しますが、最初の要素は0から始まります。)。
最後に.(ドット)をつけて、先ほど[value]で使った x をつけます。
実際の使用例
[message]
speaker=Kerolyn
message= _ "敵は $enemy[0].x の $enemy[1].x か。$enemy[2].x"
[/message]
これは次のように書いたのと同じことになります。
[message]
speaker=Kerolyn
message= _ "敵は オーク の 兵卒 か。たいしたことないな"
[/message]
注意!
次のように[value]内に続けて書くと、xの中身は最後に記述した要素で上書きされてしまいます。
悪い例
[set_variables]
name=enemy
[value]
x="オーク"
x="兵卒"
x="たいしたことないな"
[/value]
[/set_variables]
[message]
speaker=Kerolyn
message= _ "敵は $enemy[0].x の $enemy[1].x か。$enemy[2].x"
[/message]
これは次のように書いたのと同じことになります。
[message]
speaker=Kerolyn
message= _ "敵は たいしたことないな の か。"
[/message]
「ハッシュ」のように扱う
配列では、要素を呼び出すのに順番を使いますが、その場合、何番目に何の要素を割り当てたか覚えておく必要があります。また、(WML で発生するのかわかりませんが、)新たな要素を加えたときに順番が変わってしまう危険があります。
一方ハッシュでは一つ一つの要素に「ラベル」をつけて、要素を呼び出すときはそのラベルを使います。従って、配列のように格納した順番を気にする必要がありません(というか、ハッシュには順番の概念がありません。)。
目的に応じて、配列とハッシュを使い分けるとでしょう。
使用例
enemy という変数で「race」、「type」、「eval」というラベルに対して、「オーク」、「兵卒」、「たいしたことないな」という要素を退避させるとします。
[set_variables]
name=enemy
[value]
race="オーク"
type="兵卒"
eval="たいしたことないな"
[/value]
[/set_variables]
[value] の中にすべての要素を作ります。
enemy のそれぞれの要素の呼び出し方は次にようになります。
$enemy.race -> "オーク"
$enemy.type -> "兵卒"
$enemy.eval -> "たいしたことないな"
まず、通常の変数の呼び出し同様に先頭に「$」をつけます。
そして、変数名enemyの後ろに.(ドット)をつけて、[value]内で使った 「ラベル」 をつけます。
実際の使用例
[message]
speaker=Kerolyn
message= _ "敵は $enemy.race の $enemy.type か。$enemy.eval"
[/message]
これは次のように書いたのと同じことになります。
[message]
speaker=Kerolyn
message= _ "敵は オーク の 兵卒 か。たいしたことないな"
[/message]
補足
実は、ハッシュの使用例の
[message]
speaker=Kerolyn
message= _ "敵は $enemy.race の $enemy.type か。$enemy.eval"
[/message]
は
[message]
speaker=Kerolyn
message= _ "敵は $enemy[0].race の $enemy[0].type か。$enemy[0].eval"
[/message]
とやっても同じ結果になります。
察しのよい方はもうお分かりかもしれませんが、、ハッシュとして呼び出したのは、実は配列の最初の(0番目の)要素で、呼び出すときに [0] を省略したものだったのです。
「配列」のとき、各[value]を「x=〇〇」で統一する理由は、ここにあります。
そんなわけで、次にように2次元的に配列とハッシュを合成したものを作ることもできます。
これが便利かどうかわかりませんが、ディープに
ユニットをカスタマイズするときとかに知っていると役に立つかもしれません。
[set_variables]
name=enemy
[value]
race="オーク"
type="兵卒"
eval="たいしたことないな"
[/value]
[value]
race="アンデッド"
type="チョコボーン"
eval="ちょっと厄介だな"
[/value]
[/set_variables]
[message]
speaker=Kerolyn
message= _ "敵は $enemy[0].race の $enemy[0].type か。$enemy[0].eval"
[/message]
[message]
speaker=Kerolyn
message= _ "今度の敵は $enemy[1].race の $enemy[1].type か。$enemy[1].eval"
[/message]
最終更新:2017年11月25日 15:48