HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
1115
kbd押されたキーを(より自然に)検出するには?4解決


kbd

リンク

2009/11/15(Sun) 11:57:36|NO.28880

Windows上でキーを押し続けると、
初めのうちは1回だけ押されたことが検出されますが、
数百ミリ秒後くらいには押しっぱなしが検出されます。
このように検出させるのはどうすればよいのでしょうか?

stickだと検出後に一度キーを離さないと再検出できませんし、
getkeyだと押している間は常に検出されてしまいます。



この記事に返信する


Ve

リンク

2009/11/15(Sun) 12:29:26|NO.28881

>getkeyだと押している間は常に検出されてしまいます。
getkeyを使って、チェック用の変数に 1 を代入、キーを離したら 0 を代入すれば良いです。


*検出ループ gosub *キー入力 if xkey : mes "Xキーが押されました。" await goto *検出ループ *キー入力 //Xキー判定 getkey xkey,88 if xkey=0{ if x_chk=1:x_chk=0 }else{ if x_chk=1:xkey=0 x_chk=1 } return

>数百ミリ秒後くらいには押しっぱなしが検出されます。

getkeyを使って、チェック用の変数に 1 を代入、
チェック用変数が 1 の時、○○秒後再認識させる。

もしくは…
チェック用変数が 1 の時、カウント用変数に加減をして、○○になった時再認識させる。

これでいけるかと…。



あうあうあ

リンク

2009/11/15(Sun) 12:31:08|NO.28882

onkey命令では、1度検出されたあとに連続でキーが検出されますよ。
wparamでキーコードが取得できます。



KAW

リンク

2009/11/15(Sun) 13:11:45|NO.28885

多分、こんなことがしたいんだろうなと思います。

cnt_k が、Veさんの言うカウント用変数に相当します。
スペースキーを押し続けると、cnt_kの値が以下のように変わります。
0,1,2,3,4,5,6,7,8,9,10,9,10,9,10, ...
この値が例えば0か9になったときに、スペースキーが押された処理を行えば、それっぽくなります。

dim num dim cnt_k repeat await 30 getkey k, 32 if k { ;スペースキープッシュ中 if (cnt_k = 0) or (cnt_k = 10) { ;ここにスペースキーが押された時の処理を書く num++ title "" + num ;ここまで } cnt_k++ if cnt_k > 10 : cnt_k = 9 } else { ;スペースキーを離した cnt_k = 0 } loop



kbd

リンク

2009/11/15(Sun) 14:24:37|NO.28886

質問の仕方が少し悪かったです…
getkeyとチェック用変数を用いただけでは、
チェック用変数が1のときに再認識させる間隔がわかりません。
それをWindowsの設定と同じにしたかったのですが、
どこに設定が保存されているのか結局見つかりませんでした。
(というより、レジストリにあるのかなと山勘を張っていたのですが
 情報量が膨大すぎて断念した…と言った方が正しいのですが)

onkeyでも上手く検出できなかったのですが、
それは検出テストのやり方がおかしかったせいでした。
正しいやり方でテストを行った結果、onkeyで実現できました。

それ以外の方法でも、どうやれば自前で実装できるのかという意味で
仕組みを学ぶことができて、とてもためになりました。
ありがとうございました。



ONION software Copyright 1997-2023(c) All rights reserved.