getkey.dllとの連携をした場合の挙動確認
http://kimikage.ddo.jp/gallery4/
偉大なるDLL"getkey.dll"がある訳ですが。
これを使えば"HIT ANY KEY"が実現できます。と言ってわかるのはオッサンだけですかね。
NScripterに用意されているNSGetKey()やcheckkeyでは、「あるキーが押されたか」はわかっても「何かキーが押されたか」は取得できません。
で、nsluaからこのDLLを使ってみるとこうなります。
system.lua
-- system.lua NSExec("luacall animation") function NSCALL_animation() NSExec("exec_dll $999") NSExec("getret %998") NSExec("getret $998") local key_code = NSGetIntValue(998) if key_code>0 then NSExec("caption \""..tostring(key_code).."\"") end end NSLuaAnimationInterval(20) NSLuaAnimationMode(true)
キー入力があったら、そのキー入力の数値をステータスバーに出すだけですね。
で、これを無限に待ってみます。
00.txt
*define deletemenu game *start exec_dll "getkey.dll/Init" ; 初期化 mov $999,"getkey.dll/PeekD" *loop wait 1 goto *loop
マウスボタンが取得できませんので、取得できるように書き換えます。
system.lua
-- system.lua NSExec("luacall animation") function NSCALL_animation() NSExec("exec_dll $999") NSExec("getret %998") NSExec("getret $998") local key_code = NSGetIntValue(998) if key_code>0 then NSExec("caption \""..tostring(key_code).."\"") else local l, r, w, ld, rd = NSGetClick() if ld then NSExec("caption \"left down\"") end if rd then NSExec("caption \"right down\"") end end end NSLuaAnimationInterval(20) NSLuaAnimationMode(true)
まあ、だいたい取得できますね。
次はNScripter側の入力待ちを別の命令に変えてみます。
00.txt
*define deletemenu game *start exec_dll "getkey.dll/Init" ; 初期化 mov $999,"getkey.dll/PeekD" click end
普通に取得できましたが、同時に通常のclickと同じ動きで終了してしまいました。
今度は、bexecで試してみます。
00.txt
*define deletemenu game *start exec_dll "getkey.dll/Init" ; 初期化 mov $999,"getkey.dll/PeekD" *loop bclear bexec $0 mesbox $0,"bexec" goto *loop
おお、なんと言うことでしょう。mesboxが反応して、それから入力がステータスバーに表示されました。bexec恐るべしです。
ただし、bexecで拾えない入力はそのままcaptionが動きましたので、bexecは一応全ての入力を見張て動き、反応できるものにのみ反応していることがわかります。
まとめ
頭が動かないので明日加筆します。
|