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


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
1026
刑法apogeestick命令でのトリガータイプキーの不具合?5解決


刑法apogee

リンク

2013/10/26(Sat) 22:31:48|NO.57829

非トリガータイプキーを指定したstick命令の後に非トリガータイプキーを指定して
いないstick命令を行うと後者のstick命令がうまく実行しません。

適当なサンプル
repeat

stick key1,256
stick key2

pos 0,0
if key1&256 {
color ,,
}else{
color 255,255,255
}
mes "●"

pos 0,20
if key2&512 {
t=5000
}
if t>0 {
color ,,
t--
}else{
color 255,255,255
}
mes "■"

await

loop

左クリックするとクリックしている間"●"が表示されます。
右クリックするとクリックしてから少しの間"■"が表示されます。

これを実行すると右クリックだけ反応しづらくなっています。
stick key1,256 と
stick key2 を入れ替えると正常動作します。

OSはwindows8
バージョンは3.4βです

説明、ソースが下手ですみません。



この記事に返信する


暇人

リンク

2013/10/26(Sat) 23:46:10|NO.57831

stick は一度で複数キーを取得する命令
stick key1,256 だけにして
if key1&512 { で良い



test

リンク

2013/10/27(Sun) 00:22:50|NO.57832

これはstick命令の仕様といっていいのではないかと思います。
stick命令は入力した瞬間だけ検出するという処理を実装するために、前回のstick命令の結果と比較して結果を返しているのではないかと思います。その証拠に、次のように1秒間隔でstick命令を実行する場合、右クリックしたままにしておくと、次のループまで時間がある場合でもちゃんと入力が検出されます。
repeat
stick key1 pos 0,20 if key1&512 { t=3 } if t>0 { color ,, t-- }else{ color 255,255,255 } mes "■" wait 100 loop
ですから、同一ループ内で2つ目のstick命令を実行した場合は、1回目のstick命令では入力判定があったものが、2回目のstick命令では前回も押していたと判定されるため非トリガータイプキーでないと判定されなくなります。
解決策としては、暇人さんの言うとおりstick命令は1つにまとめましょう。



刑法apogee

リンク

2013/10/27(Sun) 01:35:08|NO.57833

僕が今制作しているゲームではトリガータイプのクリックと非トリガータイプのクリック
を分けたかったので・・・

回答してくださりありがとうございました。



暇人

リンク

2013/10/27(Sun) 01:41:22|NO.57834

>僕が今制作しているゲームではトリガータイプのクリックと非トリガータイプのクリック
> を分けたかったので・・・

いや・・・
>stick key1,256
これだけで目的を果たしてる
両方非トリガータイプキーにするなら256+512を指定する



test

リンク

2013/10/27(Sun) 01:51:43|NO.57835

クリックした瞬間だけ行いたい処理とクリックしている間ずっと行いたい処理が両方ある場合は、非トリガータイプに指定したstickでクリックを検出しつつ、押した瞬間かどうかの処理は自分で管理するという方法があります。
flag=0
repeat stick key1,256 pos 0,0 if key1&256 { color ,, }else{ color 255,255,255 } mes "●" pos 0,20 if key1&256 && (flag==0)<<8 { t=5000 } if t>0 { color ,, t-- }else{ color 255,255,255 } mes "■" await flag=key1&256 loop



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