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


HSPTV!掲示板


未解決 解決 停止 削除要請

2011
0331
abcdefgキー判定が無視されてしまう6解決


abcdefg

リンク

2011/3/31(Thu) 23:33:48|NO.38039

キーボードのAとBを押すと音声が再生されるプログラムのサンプルを作りました。
さらに、連続で再生されるのを防ぐためキーボードを待機するようにしました。


*start repeat getkey A,65 getkey B,66 ;ここ if A=1 :goto *play if B=1 :goto *play ;ここ await 1 loop *play mes"●" mmload "rec_04P.wav",1 mmplay 1 repeat getkey A,65 getkey B,66 ;ここ if A=0 :break if B=0 :break ;ここ await 1 loop goto *start

このプログラムだと、何故か
*play
のループが無視されてしまいます。
再生スイッチをAのみにしたら成功するのですが…(
;ここ
 の行を消す) 原因が全く分かりません。ご指導よろしくお願いします。



この記事に返信する


abcdefg

リンク

2011/3/31(Thu) 23:38:14|NO.38041

>キーボードを待機
ではなく
>キーボードが離されるまで待機
でした。



p、USAGI

リンク

2011/3/31(Thu) 23:46:35|NO.38042

>キーボードのAとBを押すと音声が再生される...
AとBを同時に押していた場合に再生するのでしょうか?
その場合この様にします。
*start
repeat getkey A,65 getkey B,66 ;ここ if (A=1) and (B=1) :goto *play await 1 loop *play mes"●" mmload "rec_04P.wav",1 mmplay 1 repeat getkey A,65 getkey B,66 ;ここ if (A=0) and (B=0) :break await 1 loop goto *start



abcdefg

リンク

2011/3/31(Thu) 23:50:20|NO.38043

同時ではなく、どちから片方を押すと再生されるように組みたいのです。



晩御飯

リンク

2011/4/1(Fri) 00:26:59|NO.38045

上手く説明できないのでソースを読んで。
それとplayラベルはいらない気がする。

*start pos 0, 0 : color 255, 255, 255 : boxf color : mes "押すまで待つよ" repeat getkey A, 65 : getkey B, 66 if A or B : break await loop dialog "押した!" pos 0, 0 : color 255, 255, 255 : boxf color : mes "離すまで待つよ" repeat getkey A, 65 : getkey B, 66 if A = 0 and B = 0 : break await loop dialog "離した!" goto *start



Cookies

リンク

2011/4/1(Fri) 10:48:51|NO.38051

晩御飯さんのスクリプトで達成できてるのだと思います。

初めので失敗する理由は、
Aが押されたら一度*playには行くのですが、
次のループのところで、たとえAがまだ押されていようとも、Bは押されていないので、
if B=0 が真となってしまうためです。
その結果、ループを抜け、*startに戻ってしまうのです。
この説明でわかってくれました?



あと、いくつかアドバイスを。
晩御飯さんのように
 if A=0 : 〜
 if B=0 : 〜
というのはまとめて
 if (A=0)and(B=0)
にしたほうが、分かりやすいです。

それから、
 mmload "rec_04P.wav",1
では、mmloadを何度もするのが無駄なので、スクリプトの一番初めにでも移動すべきです。



abcdefg

リンク

2011/4/1(Fri) 11:38:58|NO.38053

晩御飯さんのスクリプトを参考にして組んでみます。回答してくださった皆様ありがとうございました。

Cookiesさん
解説とアドバイス、とてもありがたいです。



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