while文とキー入力

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
piyo

while文とキー入力

#1

投稿記事 by piyo » 17年前

先日初投稿させて頂きました。

キー入力のところを読んでいての質問なのですが、

例えば、
while( CheckHitKey( KEY_INPUT_ESCAPE) == 0 ){
if(ProcessMessage() == -1 ) break ; //①

if(CheckHitKey( KEY_INPUT_Z)==1) x=x+4; //②
if(CheckHitKey( KEY_INPUT_X)==1) y=y+4;  //③


}

等という文の時、
while文ですので、①→②→③という判定を繰り返していると考えて良いのでしょうか?
そう考えると、0.000…1秒差で、②の判定をしている時に、Xキーを押すとすると、Xキーを押してない事になりますか?
この例だと、少ないのでそう誤差はありそうにないですが、
相当長い文になった時、一番上のifのCheckHitKey関数と、一番下のそれとでは、
判定されない時が出てきそうに思えます。
どうなのでしょうか?


ps:解説ページの事で要望なのですが、決まっている言葉(ifや、while)と、関数や変数等の、適当な名前を付けられるものとの区別を、色をつける事等でして欲しいです。
宣言をきちんと見ておけばよい話なのですが、「Buf」等の、決まり言葉っぽいものが出てくると
少し混乱してしまいます。

Justy

Re:while文とキー入力

#2

投稿記事 by Justy » 17年前

>while文ですので、1→2→3という判定を繰り返していると考えて良いのでしょうか?
 Y
 但し、1の判定が真の場合 breakしてしまうので、2以降は判定されません。



>2の判定をしている時に、Xキーを押すとすると、Xキーを押してない事になりますか?
 「Xキーが押されていないことになる」というのが同一フレームでの2や3の判定で、
ということでしたらあり得ます。

 キーボードの押下チェックはハード・OSレベル的にこれほど短時間での検出はしていませんし、
そもそも DXライブラリの仕様では前回の取得からの経過時間が最大約 1ms未満の場合、
前回と同じ情報を元に押下判定をするようになっていますので、2の段階で押しても
それが3で反映されるとは限りません。
(2と3で1ms以上の時間が空けば別ですが)


>判定されない時が出てきそうに思えます]
 if文を通過さえすれば判定しないことはないですが、判定の結果が食い違うことはあり得ますね。
 しかし、通常 CheckHitKey()を複数回呼ぶようなことはあまりしません。
 もしそのような使い方をするのであれば、GetHitKeyStateAll()の使用を検討するべきではないかと。

piyo

Re:while文とキー入力

#3

投稿記事 by piyo » 17年前

回答ありがとうございます。
分かりました。
GetHitKeyStateAll()を使うようにすれば、
それほど気にしなくて良いということですね。

ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る