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
<< ld命令の謎の挙動 飛びたいラベルへ直接ジャンプ >>