bcursor命令について
[2009年7月5日修正、追記]
 更新.txtには「カーソルキー入力を得たい場合はbclearとbexecの間にbcursor命令を入れてください。」と書いてありますが、エンターキーとスペースキーの入力を得たい場合もbcursor命令を使用する必要があります。
 以下、検証用スクリプト。

*define
game

*start
;bcursor
bexec $0
caption $0
goto *start


 押されたキーをタイトルバーに表示するだけのスクリプトです。bcursor命令をコメントアウトしていない場合とした場合で、カーソルキー・エンターキー・スペースキーに対する挙動が変化することを確認できるはずです。bcursor命令を使用しない場合、カーソルキーに対しての反応は無く、エンターキーとスペースキーに対してはLCLICKが返りますカーソルキーはスプライトボタンの選択に用いられ、エンタキー・スペースキーは左クリックと同様の動作をします(ただしbexecから処理が返ってくるのはキーアップ時ではなくキーダウン時)。使用した場合はカーソルキーはUP・DOWN・RIGHT・LEFT、エンターキー=RETURN、スペースキー=SPACEとなります。

[追記]
 きなこさんからのコメントを受けて、スプライトボタンに関して調べていなかったことに気がついたので、ちょっと試してみました。

*define
game

*start
bclear
lsp 1,":s#FFFFFF#FF0000あいうえお",0,0
print 1
bsp 1
;btrans

*loop
bexec $0,%0
if %0 > 0 inc %1:itoa $1,%1:caption "sp"+$1:goto *start
goto *loop


 上記スクリプトは、スプライトボタンを1個設置し、それがクリックされるとspX(Xにはボタンがクリックされた回数が入る)という文字列をタイトルバーに表示するものです。このスクリプトにおいて、スプライトボタンに対して左クリックをした場合とカーソルで選択→エンターキーないしスペースキーで決定した場合では、明らかに動作が異なります。
 具体的には、左クリックの場合はマウスの左ボタンがアップされた後でbexecから処理が返ってくるのに対し、エンターキー・スペースキーの場合はキーがダウンされてすぐに処理が返るという違いがあります。なので、後者ではキーを押している間中数字が増え続けることになります。
 もしbcursor命令を使用しない場合は「戻り値がLCLICKでもマウスからの入力とキーボードからの入力の2通りの場合があり、動作が異なる」ことを覚えておかなければなりませんね。

 余談ですが。
 上記スクリプトでbtrans命令のコメントアウトを外すと、カーソルキーでボタンを選択しようとしても透過部分にカーソルがあってしまい、エンターキーを押しても決定できません。
 まあ、bexecで選択肢命令を自作する(=文字列をスプライトボタン化する)場合はbtransを使用しないでしょうし、真ん中が透過されているボタンというのも想像できないので、実害はないでしょう。
[PR]
by lyricist_m | 2009-07-05 16:49 | NScripter
<< bexecをキーアップに対応させる GENOウイルス >>