ここから本文です

UWSC 多重ループ・分岐についてアドバイス願います こんにちは。今UWSCで多重ル...

dfrwrwrさん

2015/9/2900:09:32

UWSC 多重ループ・分岐についてアドバイス願います

こんにちは。今UWSCで多重ループと分岐を使った命令を
作成してるのですが、
多重ループの抜け方や分岐が上手くいかずにおります。

作成した命令文は以下のものです

Mode = TRUE //TRUEはA、FALSEはB
Mouse_on = FALSE //FALSEでOFF、TRUEでON
While True//命令のループ宣言
//②
While True//入力用ループ
ifb GETKEYSTATE(VK_RBUTTON) and Mouse_on = FALSE then //右クリック判定
PRINT "有効になりました"
Mouse_on = TRUE //入力有効
Sleep(0.5)
break//①へ
ENDIF
WEND

//①
While True//選択とリセット用のループ
ifb Mouse_on = TRUE
ifb GETKEYSTATE(VK_1) and Mode = TRUE then
PRINT "Aが選択" ; Sleep(0.5)
Mode = FALSE //B選択へ
ENDIF

ifb GETKEYSTATE(VK_1) and Mode = FALSE then
PRINT "Bが選択" ; Sleep(0.5)
Mode = TRUE //A選択へ
ENDIF

ifb GETKEYSTATE(VK_ESC) then //リセット手段1ESC
PRINT "選択を終了します" ; Sleep(0.5)
Mode = TRUE //初期選択をAに戻す
Mouse_on = FALSE //マウス入力リセット
break //②へ
ENDIF

ifb GETKEYSTATE(VK_RBUTTON) then //リセット手段2右クリ
PRINT "選択を終了します" ; Sleep(0.5)
Mode = TRUE //初期選択をAに戻す
Mouse_on = FALSE //マウス入力リセット
break //②へ
ENDIF
ENDIF
WEND
WEND

目指す命令は右クリックの入力監視、入力が確認されたら
以降は1キーの入力監視で入力時に命令1→命令2→1・・・・を行う
1キーの監視が不要になる場合を考慮して1キーと同じように
ESCや再度右クリックも入力監視させておき、1キー監視中に
ESCや右クリックが入力されれば、1キーの操作で生じた
選択用の変数を元の内容に戻しbreak文でループを抜けて
②の地点から最初の起動時の右クリックの入力監視に戻る
と言う命令を目指して作成したのですが

実際に動かすとエラーこそ起こさないですが、右クリックをした時に
有効になりました、選択を終了します、が連続で起こり
選択Aや選択Bの1キー反応が悪かったりと上手く動かない状態です。

単純にひとつにまとめずに個別にすれば解決できそうですが
ModeとMouse_onはグローバル変数として
上記の命令の変化を別の命令に連動させる為に必要があり
構造を崩す事が出来ずにおります。

修正点、改善点などがあれば教えて頂けると非常に助かります
ご回答宜しくお願い致します。

この質問は、活躍中のチエリアン・専門家に回答をリクエストしました。

閲覧数:
403
回答数:
1
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

jun_saedaさん

2015/9/2907:18:37

コードそのものに問題はないと思います。1キーの反応が悪いというのは、押すたびに0.5秒の待ち時間が発生しますので、その間はキー入力を受け付けないだけではないでしょうか。
右クリックの場合は、待ち時間が短過ぎるのかもしれません。

右クリックに関しては、次のような対応手段があります。

ifb GETKEYSTATE(VK_RBUTTON) then //リセット手段2
WHILE (GETKEYSTATE(VK_RBUTTON)=TRUE)
SLEEP(0.01)
WEND
//以下略

つまり、右クリックを検出したら、放すまで待つのです。こうすれば、少なくとも、連続で検出することはなくなります。

1キーの反応が悪いことについては、待ち時間を調整するしかないでしょう。

質問した人からのコメント

2015/9/29 12:37:10

アドバイスを元に、細かく命令の処理工程を確認したところ
ご指摘通りマウスの判定が早すぎるのが原因なようで
非常に短い連続マウス処理のわずかな間隔で1キーの処理判定が行なわれ
A→B→Aの宣言が差し込まれ実行されてるようで。

ご紹介頂いたコードの待機を付け加える事により無事改善できました。
ご回答並びにアドバイスありがとうございました。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問や知恵ノートは選択されたID/ニックネームのMy知恵袋で確認できます。