我有一個基於回合的遊戲。在您的輪到時,它會提示您進行移動,並要求您輸入一次按鍵。只要按鍵被檢測到,遊戲就會繼續,直到下一回合纔會提示您。防止GetAsyncKeyState函數在被調用後檢測輸入嗎? C++
雖然使用GetAsyncKeyState函數,但我仍然遇到問題,因爲即使在調用它之後它仍存儲按鍵。
從MSDN網站: 確定某個鍵是否向上或向下的函數被調用,的時間和是否以前調用GetAsyncKeyState後,按下鍵。
粗體區域是我造成的問題,因爲用戶可以在不輪到他/她時輪流鍵入垃圾信息,那麼當輪到他/她時,遊戲會提示用戶並立即確認一個事先按下的輸入。
我對這個功能很類似:
unsigned int getUserInput(){
while (true) //Await a user's input
{
if (GetAsyncKeyState(0x31))
{
return 1; //User pressed 1 key
}
else if (GetAsyncKeyState(0x32))
{
return 2; //User pressed 2 key
}
else if (GetAsyncKeyState(0x33))
{
return 3; //User pressed 3 key
}
else if (GetAsyncKeyState(0x34))
{
return 4; //User pressed 4 key
}
else if (GetAsyncKeyState(0x35))
{
return 5; //User pressed 5 key
}
else if (GetAsyncKeyState(0x36))
{
return 6; //User pressed 6 key
}
}
}
我應該不會在這種情況下使用ASNC國家重點?如果是這樣,什麼是更好的選擇?
哇......這讓我感覺有點過頭了。幾個問題:在你的第一個代碼塊中,0x8000是什麼意思,爲什麼需要那裏?在我所有的GetAsyncKeyState調用中,它只是GetAsyncKeyState(參數)調用。 – Hatefiend
@Hatefiend:'0x8000'是一個十六進制數字,它的二進制表示形式是'1000000000000000'。通過將(使用'&')與對'GetAsyncKeystate'的調用結果相結合,您可以屏蔽除最重要位以外的所有內容。其結果是,如果該位爲0,則組合的結果爲0(在if語句中將其作爲「false」),如果該位爲「1」,則結果爲非零在if語句中比較爲'true')。 –
我也應該對我的問題進行更具描述性的描述。有時我會要求用戶按下字母鍵和數字鍵,空格鍵等,因此您創建的for循環可能無法工作。真的看完循環之後..它告訴計算機......「好吧,用戶按下了按鍵1?按鍵2還是按鍵3?等等。」我不明白這是如何改進的:if(key1 pressed)else if(key2 pressed)等等。我不明白它是如何解決我的問題,即使在函數調用之後,AsycKey仍然監聽按鍵已經制成。 – Hatefiend