ティラノスクリプトで for ループ [擬似]
ティラノスクリプトのタグには for ループがありません
if はありますが for はありません
そこでどうするか
わたしがやっている方法は macro 化しての再帰呼び出しです
ふつうの for 文に慣れていると案外思い浮かばない方法かもしれないので,
紹介したいと思います
ツリー構造以外のデータに再帰呼び出しを適用する発想に
なかなかならないかもしれませんので
別の方法で, 例えば ティラノスクリプト公式サイトでも紹介されているこちらの plugin
https://tyrano.jp/market/item/2016
もありますが, macro 化しての再帰呼び出し法 もなかなかお手軽でお薦めです
[jump] や飛び先のラベルを追加することもありません
やりかた
プログラムの中で for ループの部分は
たいていそこで一機能をなしていることが多いので,
その処理に個別の名前をつけて macro 化してもさして問題はありません
スクリプトの見通しとしても悪くはなりません
例えば, キャラクター 5人分の何かの処理をしたいと き, ふつうなら 1人分の処理を 5回 for ループで回すことになりますが, この 1人分の処理 の部分は macro 化して切り出しても問題ないと思います
ただ, 今回ここで紹介する macro 化して再帰呼び出し法 で ふつうの for ループの感覚と少し異なるところは, ループ内部の処理を macro 化するのではなく, ループ制御を含めた部分が macro になるところです
以下に例で示します
例
[iscript]
; 次のキャラクターたちがいるとします
f.charas = ["marin", "katia", "kinoko"];
[endscript]
; ここで f.charas 配列分の何かの処理をしたいとき
; 1人分の処理を [loop_logic] として macro 化します
[macro name="loop_logic" ]
; 1人分の処理をここに書いていきます
[eval exp="console.log(f.charas[t.i])"]
; 終了部分
; カウンタをプラスして, ループを終わるか判定
[eval exp="t.i++" ]
[if exp="t.i < f.charas.length" ]
[loop_logic]
[endif]
[endmacro]
; カウンタを初期化して実行
[eval exp="t.i=0" ]
[loop_logic]
実行結果
marin
katia
kinoko
となります
1回は処理を行うので, do while 文に近いですね
よかったら試してみてください