<   2007年 12月 ( 3 )   > この月の画像一覧
ld命令の謎の挙動
 ld命令の場所指定(l,c,r)を変数や別の文字で代用できたりしないかなーといろいろ試してみたところ、
ld 1,1
 と書くとなぜかエラーが発生しないことに気がついた。
 第一引数がスプライト番号で、実はスプライトを立ち絵として表示できるんじゃないか、なんて妄想をしてみたが、試したら表示されなかった。スプライト番号どころか、2桁以上の数字はどうやら受け付けてくれないらしい。
 第一引数は謎のままだが、第二引数はエフェクト番号で決定のようだ。試しに2を入れてみたら「定義されてないエフェクトだ」と怒られたから。
 なんなんでしょ、これ。



 ちなみに、場所指定はやっぱりl,c,rの3文字しかダメらしい。文字列・文字変数でl,c,rを入れてみたが駄目だった。
[PR]
by lyricist_m | 2007-12-11 11:56 | NScripter
getspsizeでスプライトの存在確認
 以前メモ1・getspsizeで、getspsize命令を使用するとスプライトの存在確認ができるという記事を書いた。
 ところがNScripter-Tipsさんの中級者用講座・Tipsによれば、csp後にgetspsizeすると消去前のスプライトのサイズが返ってきてしまうらしい。
 このままではスプライトの存在確認が出来ない。ではどうしたらいいか。
 ぱっと思いついたのは、小さい画像を読み込むことでサイズを上書きすることだった。以下のような感じで。

*csp
getparam %0
_csp %0
lsph %0,"getspsize.jpg",0,0
return

 csp後に1*1ドットの画像(ここではgetspsize.jpg)を読み込むことで、getspsizeで返ってくる値を1、1にする。存在確認をするときは、サイズが1以下なら存在しないとすればいい。
 問題は、サイズは小さいとはいえ画像を読み込んだままであるということだろうか。試してはいないが、多少ネックになりそうな気がする。


[12月11日追記]
 よく考えたらまたcspしなおせばいいだけだった。なんという間抜け。
 ということで、スクリプトはこうなります。
*csp
getparam %0
_csp %0
lsph %0,"getspsize.jpg",0,0
_csp %0
return
 あと、このままでは引数が-1(スプライト全消去)のときにバグが発生します。個人的には-1を使う機会がほとんどないので(必要なスプライトまで消してしまうから)、自分が使う場合にはこのままでいいんですけどね。何かするとしたらスプライト番号の範囲から外れた数字が引数に与えられた場合にそのままreturnするくらいでしょうか。

[12月11日さらに追記]
 上のスクリプトもまだ冗長でしたね……。
 おそらくこれが一番スマート。
*csp
getparam %0
lsph %0,"getspsize.jpg",0,0
_csp %0
return
[PR]
by lyricist_m | 2007-12-10 21:51 | NScripter
飛びたいラベルへ直接ジャンプ
*direct_jump
input $0,"飛びたいラベルを半角で入力してください。","*s",10,0
labelexist %0,$0
if %0 == 0 mesbox "入力されたラベルは存在しません。","ラベルエラー!":goto *direct_jump
goto $0

 クリック待ちの時にF1を押したら上記のスクリプトに飛ぶ、とかするとデバッグの時に便利かもしれない。自分の場合はデバッグ用のシーンセレクト画面にこれを置いている。最後の1行がgoto $0ではなくてgosub $0だが。
 エラー処理なんかをやってないので、
 1.gosubのスタックが積まれている状態で飛ぶと危険かも
 2.存在するラベルが入力されるまでループを抜けられない
 という問題がある。自分はこれで十分満足しているが、もし使う場合は各自変更した方がいいかも。
[PR]
by lyricist_m | 2007-12-08 16:51 | NScripter