JKaiUI改良版 配布中

JKaiUI改良版をファイル置き場にて配布中です。

最新版はここから落とせます。追加機能の使い方の説明は落としたファイルのReadMeファイルを参照してください。

オリジナルのJKaiUIの使い方、Mac上でのXLink kaiの情報はMac de Kaiを参照してください。

JKaiUI改良版はまだ開発版です。オリジナルからそう多く変更していないので大丈夫だともいますが、ご利用は自己責任でお願いします。

2013年8月10日土曜日

吉里吉里 KAGでのfor, foreachマクロ

吉里吉里のKAGには繰り返しがありません。
そこでマクロを作ってみました。

そこそこうまくできたのですが、不満点というか欠点として繰り返し処理(for文の中身)を一連の流れの外に書く必要があります。
もっと使いやすくしたのですが現状ではここまでが限界でした。
もっといいのがある。もっと良くできる。など意見があれば連絡ください。

マクロの説明

最初に通常KAGで私が書くときの書き方を
次に、作成したマクロの使用例をいくつか書きます。
最後にマクロの中身です。


KAGでのfor文

0から9を表示するだけです。


for, foreachマクロの使用例


for文1
上の例と同じく0から9を表示します。
tf.iを増やしながら*doのラベルの処理を行います。
tf.iの初期値は0です。

for文2
こちらは2から9を表示します。
startでtf.iの初期値を指定できます。

foreach文1
foreach文の例です。
この例では配列内の数値が順番に表示されます。
listに配列もしくは配列の入った変数名を指定できます
tf.elemが各要素になります。

foreach文2
scenarioフォルダ内のファイルを表示する例です。

foreach文3
bgmフォルダ内のファイル一覧から再生リストを作成する例です。
listを指定しない場合はtf.listが操作される配列になります。
そうすることでtf.listとtf.iでtf.elemのかわりをすることができます。
tf.elemで書くと面倒な場合などで利用できます。
この場合、tf.elemにそのまま置き換えるとファイル名が変数名と判断されるためにエラーになるためにこのようにしています。
(tf.elemでもエスケープシーケンスを使って文字列扱いにすれば解決できます。)

foreach文4
tf.list以外を利用したときはlistに変数名を指定します


for, foreachマクロの実装

重要な部分だけ説明します。
まず、[eval exp="mp.val=Scripts.eval(mp.list)"]の行です。
KAGのマクロでは引数は文字列で渡されるようです。
そこでScripts.eval()で変数名から中身の配列への参照を得ています。
次に[call target="&mp.func"]の行です。
func引数に指定された文字列のラベルにジャンプします。
ジャンプ先の最後のreturnタグで戻ってくることを想定しています。
またKAGにおいてマクロは呼び出し元のコンテキストで実行されるようです。
すなわち、storage引数が呼び出しもとファイルと同じ物となります(forマクロと呼び出し元は異なるファイルと仮定)。
そのため、このコードでは呼び出し元と同じファイル中のラベルをfunc引数に指定する必要があります。
違うファイルのラベルを呼べるようにするにはstorage引数を追加するだけでおそらく可能です。

0 件のコメント:

コメントを投稿