引数ライブラリ
 アイマスのパジャマシリーズで使った引数ライブラリをちょこっと改良して本家の方にアップしときました。こちらからDLできます。
 これは「getparamで値を受け取るときに一時的に使用できる変数を提供する」という目的のために作られたライブラリです。デフォルトではParam1~Param10までの10個の変数を確保してくれますが、数はちょっと手を加えるだけで簡単に増やせます。が、setwindowを上書きでもしない限り10個もあれば充分でしょう。
 ライブラリ本体は99.txtで、00.txtには使用サンプルがつけてあります。フォルダ内にnscr.exeを入れて実行すればサンプルを動かせるはず。
 このライブラリで提供されるのはuseParam命令とendParam命令の2つのみで、これらは以下のような使い方を想定しています。

*abc
useParam 2
getparam %Param1,%Param2,$Param1,$Param2
.
.
.
endParam
return


 useParam命令で指定された個数の変数(ここではParam1とParam2)を確保します。それまで変数に入っていた値は引数ライブラリ内のスタックに保存され、endParamが実行されると変数の値が復元されます。なので、使用サンプルのようにuseParamとendParamをネストさせることも可能です。
 ただし、一つ注意点が。getparam命令の仕様上、以下のようなことができません。
*abc
useParam 2
getparam %Param1,%Param2
bcd %Param2,%Param1
%Param1,%Param2@
endparam
return

*bcd
useParam 2
getparam %Param1,%Param2
%Param1,%Param2@
endparam
return

 もしこんなスクリプトを実行すると、bcd内のgetparamが意図したとおりに動作しません。
 どうやらgetparamは、内部的には単純にmovを繰り返しているだけのようで、問題のgetparamは
mov %Param2,%Param1
mov %Param1,%Param2

 と同等の働きをしているのです。これじゃ変数の中身が全て%Param2と同じ内容になってしまいますよね。
 そのため、引数ライブラリを使う際には、自作命令の引数にParamX系を渡すのはさけ、一度別の変数に内容を移してその変数を引数として渡すという少し面倒なことをしなければなりません。これは少ない変数を使いまわしているようなときにも言えることではありますが。

 あと、さきほど「以下のような使い方を想定しています」と書きましたが、これは別の使い方もできるよ、ということを示しています。
 なぜなら、この引数ライブラリは見方を変えれば一時変数ライブラリになるからです。
 元々は一時変数を使いたいというところから作り始めたのですが、一時変数を使うたびにuse命令とend命令を呼ぶのは面倒だなと思ったので引数ライブラリにしました。いつからか%0~%10を一時変数として使ってますしね。btnwaitでボタンの戻り値を受け取る時はつい癖で%0を使ってしまいます。

 ここまで書いて、readme.txtをつけるのを忘れていたことに気がついたんで、上の内容をまとめて後日つけておきます。今日はもう時間がないので、これで。
[PR]
by lyricist_m | 2008-04-16 22:36 | NScripter
<< windowchip命令の挙動が微妙 NScripterにおけるmo... >>