我寫了一個簡單的程序與SFML和的OpenGL其中提請,可以在屏幕上用箭頭鍵移動的紡紗方。重複按鍵事件阻塞
它可以在我測試過的所有Linux和Mac電腦上正常工作,但是當我嘗試移動Windows上的方塊時(通過按住箭頭鍵),它移動一小段距離然後停止移動並旋轉。我很確定該程序陷入了GetEvent
方法 - 我的猜測是,當我將按鍵按下足夠長時間以使其重新開始時,事件堆棧會不斷添加新事件,然後才能彈出所有內容關閉它(如果我把Windows的密鑰重複率降到最低,那麼問題就會消失 - 儘管我不太喜歡這個解決方案)。
我發現按住Alt,Ctrl,Delete,Page Up,Page down,Home,End等等都會導致此行爲(即使我沒有在程序中檢測到任何這些鍵),但所有字母鍵,以及空格鍵,退格鍵和鍵盤箭頭鍵都可以正常工作(即,如果我將它們按住太久,它們不會導致程序暫停)。
我沒有確切的代碼(我只是把我的筆記本電腦關閉),但它看起來像:
while(running) {
while(app.GetEvent(event))
if(event.Type==sf::Event::Closed) running=false;
if(input.IsKeyDown(sf::Key::Right)); // move right
// etc etc
// update rotation
// draw everything
}
任何想法,以什麼確切的問題可能是,我如何可以修復它?
您是否曾嘗試在布爾值中存儲關鍵狀態,然後根據布爾狀態來執行邏輯?所以。 。 。 。 。 if(input.IsKeyDown(sf :: Key :: Right))right = true; 。 。 。 。 。 。如果(right)moveRight(); – epaik 2011-04-08 20:48:50