先日初投稿させて頂きました。
キー入力のところを読んでいての質問なのですが、
例えば、
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」等の、決まり言葉っぽいものが出てくると
少し混乱してしまいます。
while文とキー入力
Re:while文とキー入力
>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()の使用を検討するべきではないかと。
Y
但し、1の判定が真の場合 breakしてしまうので、2以降は判定されません。
>2の判定をしている時に、Xキーを押すとすると、Xキーを押してない事になりますか?
「Xキーが押されていないことになる」というのが同一フレームでの2や3の判定で、
ということでしたらあり得ます。
キーボードの押下チェックはハード・OSレベル的にこれほど短時間での検出はしていませんし、
そもそも DXライブラリの仕様では前回の取得からの経過時間が最大約 1ms未満の場合、
前回と同じ情報を元に押下判定をするようになっていますので、2の段階で押しても
それが3で反映されるとは限りません。
(2と3で1ms以上の時間が空けば別ですが)
>判定されない時が出てきそうに思えます]
if文を通過さえすれば判定しないことはないですが、判定の結果が食い違うことはあり得ますね。
しかし、通常 CheckHitKey()を複数回呼ぶようなことはあまりしません。
もしそのような使い方をするのであれば、GetHitKeyStateAll()の使用を検討するべきではないかと。
Re:while文とキー入力
回答ありがとうございます。
分かりました。
GetHitKeyStateAll()を使うようにすれば、
それほど気にしなくて良いということですね。
ありがとうございました。
分かりました。
GetHitKeyStateAll()を使うようにすれば、
それほど気にしなくて良いということですね。
ありがとうございました。