bexecをキーアップに対応させる
 bexec命令は、マウスに関しては「ボタンが離された瞬間」に処理が返ってくるのですが、キーボードに関しては「キーが押された瞬間」に処理が返ってきます。この点が旧ボタン命令と異なるので、単に命令を置き換えるだけでは誤動作する場合が多々あります。なので、旧ボタン命令と同じ感覚で使えるように、bexec命令を用いた自作命令bexec2を作成し、「キーが離された瞬間」に処理が返ってくるようにしてみました。以下、スクリプト。

*bexec2
getparam s%0

bexec $%0
;if $%0 == "CTRL" return
mov $1,$%0
len %1,$1
if 1 < %1 && %1 < 5 && "S" < $1 && $1 < "T" mov $1,"LCLICK"
if $1 != "LCLICK" jumpf
checkkey %1,"SPACE":if %1 == 1 mov $1,"SPACE":jumpf
checkkey %1,"RETURN":if %1 == 1 mov $1,"RETURN":jumpf

~
checkkey %1,$1
if %1 == 0 return
wait 10
jumpb
return


 bexec2命令はbexec命令と同様、押されたボタンを文字列として返します。スプライトボタンの場合はS+スプライト番号という形式ですね。この命令を使えば、キーダウン時ではなくキーアップ時に処理が返ってきます。また、bcursor命令を指定していない場合でもスペースキーとリターンキーが正常に動作するように、bexec命令でLCLICKが返ってきたらcheckkey命令で実際に押されたキーは何なのかを判別しています。あと、bexec命令の下のコメントアウトを外すと、コントロールキーの場合のみキーダウン時に返ってくるようになるので、クリック待ち時のコントロールスキップも可能になります。



 話変わって。
 現在、bexec命令を用いたシステムカスタマイズ用サンプルスクリプトを作成中です。一応、nsluaサンプルスクリプト内のシステムカスタマイズサンプルでbexecが使われているのですが、Luaが使われているので、単純にbexec命令の使い方を知りたい人は手が出しづらいんじゃないかと思いまして。「俺はLuaなんて使わないぞ!」なんて方もいるでしょうからね。
 とりあえずクリック待ちの部分はできたので、あとはちょこちょこ調整してから公開しようと思います。右クリックメニューとかセーブロード画面などその他諸々は、公開してから追加していく形で。
[PR]
by lyricist_m | 2009-07-07 18:31 | NScripter
<< ローカル宣言を行なう場所に対し... bcursor命令について >>