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


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
0826
火狐キー判定がうまくいかない6未解決


火狐

リンク

2013/8/26(Mon) 18:08:12|NO.56652


KY=0 stick KY,16 if (KY&16)=16 :goto *owari stop *owari mes "押された"
このプログラムを実行してスペースキーを押しても何の反応もありません
なぜですか?



この記事に返信する


test

リンク

2013/8/26(Mon) 18:31:41|NO.56653

stick命令は命令実行の瞬間のキー入力を判定するものです。

HSPのプログラムが起動すると上から順番に実行されていくので、そのstick命令はプログラムが起動した瞬間に実行され、その後はstop命令により止まったままです。
したがって、起動後にスペースキーを押しても反応しません。

ではどうすればいいかというと、onkey命令を使う方法やループでstick命令を繰り返し実行し続ける方法があります。



Keisuke

リンク

2013/8/26(Mon) 18:49:40|NO.56654

これでどうでしょうか.

KY=0 repeat stick KY,16 if (KY&16)=16 :gosub *owari wait 10 loop stop *owari mes "押された" return



火狐

リンク

2013/8/26(Mon) 19:30:50|NO.56655

ありがとうございます
もしよろしければonkey命令についてもう少し教えていただけないでしょうか?



Keisuke

リンク

2013/8/26(Mon) 20:06:35|NO.56661

onkey命令は, キーボードが押されたときに自動的にジャンプするラベルを指定するものです.
例えば, 先程のコードは, 押されたキーがスペースキーなら, 画面上に"押された"と
表示するプログラムですが, 次のように書き換えられます.

onkey gosub *owari stop *owari // iParamというシステム変数に格納された仮想キーコードが0x20(スペースキー)の場合 if (iParam == 0x20) { mes "押された" } return

stick命令は, 特定のキー(よく使われるキー)が押されたことを,
指定した変数の値を調べることで判断するものです.

一方, onkey命令は, キーボードからの入力があれば, どのキーが押されたかに関わらず,
特定のラベルにジャンプするものです. ジャンプしたラベルで, どのキーが押されたかを
判断するには, システム変数のiParamを利用します. このシステム変数には, 押された
キーの仮想キーコードが代入されています(検索して調べてみてください). スペースキーの
仮想キーコードは, 16進数で20ですので, ジャンプ先ではこれを判定します.
もし, キーボードのAが押されているかどうかを判断したい場合は, 次のようにします.
Aの仮想キーコードは, 10進数で65ですので,


*owari // iParamというシステム変数に格納された仮想キーコードが65(A)の場合 if (iParam == 65) { mes "Aキーが押された" } return

stick命令はゲームを作る際によく利用されると思います.
一方, onkey命令は, ゲーム以外の実用的なソフトなどで使うと思います.
onkey命令の方が応用が利きます.

(仮想キーコード一覧 : http://homepage3.nifty.com/ic/help/rmfunc/vkey.htm)



Keisuke

リンク

2013/8/26(Mon) 20:08:11|NO.56662

他に, getkey命令などでも同様の機能を実現できますが, それはヘルプを見てください.



暇人

リンク

2013/8/26(Mon) 20:08:15|NO.56663

とりあえずヘルプを読もう
サンプル逆引きにサンプルも出る



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