gosubで引数を受け取る
 ひょんなことから、gosubでgetparamが使えることを発見してしまいました。長くなるので畳みます。



以下、スクリプト。

*define
game

*num
getparam %0
itoa $0,%0
caption $0
return

*str
getparam $0
caption $0
return

*arg_num
getparam i%0
itoa $0,%0
caption $0
return

*arg_str
getparam s%0
itoa $0,%0
caption $0
return

*start
gosub *num 1
click
gosub *str "2"
click
gosub *arg_num %3
click
gosub *arg_str $4
click
end


 使い方は普通の命令と一緒。違うのは前にgosubってついてるだけ。
 何故こんなことに気がついたかと言いますと。スプライトの位置情報を取得できるようにlsp周りの命令を上書きしていたのですが、「lspとlsphってほぼ一緒なんだから、lsphの時はgosubでlspに飛んで戻ってきたらvspで非表示にすればいいか」と思い立ち、実際にやってみたらエラーになったんですよ。その際のスクリプトの簡略化版が以下のものです。

*define
defsub a
defsub b
game

*a
getparam %0
return

*b
gosub *a
return

*start
b 10
end


 この時のエラーメッセージが「数字がくるべきところに数字がありません。」で示されたのがgosub *aの行だったので、「なら数字を与えたら動くのか?」と思いやってみたら本当に動いてびっくり。ちなみにこのスクリプトでgosub *a 10と書き換えると、b 10の引数である10が表示文扱いになります。
 さて、gosubで引数を受け取れると解ったわけですが、残念ながら活用方法が思いつかない。そもそも引数を受け取るならdefsubしとけって話ですしね。あ、でも既にdefsubしてある命令にも使えるから関数ポインタ的な使い方ができるのかな? ちょっと使い方考えてみます。
[PR]
by lyricist_m | 2009-02-20 02:57 | NScripter
<< gosubで引数を受け取る(2) 効果音の分類、設定 >>