Q
GLFW輸入狀態
1
A
回答
3
「按」與「重複」之間存在延遲是非常重要的。大多數人不能按下和釋放一個鍵,這樣你的遊戲只記錄被按下的鍵正好一幀。而那些有能力的人不可能一貫這麼做,並且沒有任何準確性。
因此,用戶將永遠無法「做一次」。他們會爲多個幀做它。這通常很糟糕。
此外,按下,按住和重複之間有一個概念上的區別。握住就是按住鍵時發生的事情。重複是由操作系統管理的設施(這就是爲什麼GLFW不給你設置重複速率的方法)。關鍵重複通常用於文本輸入(無論如何GLFW都會通過其基於文本的回調來幫您處理)。
本質上,你應該忽略它。在遊戲的情況下,一個按鍵有4種可能的有用狀態:沒有按下,剛被按下,被按住,剛剛被釋放。您可以從按鈕的先前狀態(您可以存儲的)和回調提供的按鈕的當前狀態中推斷出這一點。
如果您只想在按鈕「剛剛按下」時採取行動,那麼您需要知道該按鈕沒有在前一幀中按下。如果現在按鍵但不在前一幀中,請採取措施。
+0
只需要檢查lastState和newState ..哇,很好的答案我不能相信這是非常正確的在我面前哈哈!好一個! – GDN9
3
一種方法是簡單地忽略「重複」事件,並且只與「新聞」和「發佈」事件一起進行。
當你得到「新聞」事件設置一個標誌,並清除「釋放」事件的標誌。然後只需每幀檢查一次這個標誌。
相關問題
- 1. AntTweakBar鍵輸入和GLFW 3
- 2. 使用GLFW處理輸入
- 3. 狀態更新輸入javascript
- 4. 輸入狀態錯誤,Slick2d
- 5. Facebook喜歡狀態輸入
- 6. JavaScript/jQuery的狀態和國家輸入
- 7. 原始輸入的初始狀態
- 8. 更新狀態到輸入字段
- 9. 重置HTML5無效輸入狀態
- 10. Alamofire始終輸入失敗狀態
- 11. React Datepicker輸入狀態不變?
- 12. HTTPURLConnection狀態200但輸入流爲空
- 13. 獲取輸入的「檢查」狀態
- 14. AngularJS:輸入清潔不能在狀態
- 15. 確定輸入元素狀態
- 16. 如何在狀態欄中輸入textcolor?
- 17. 黑莓的狀態四路輸入?
- 18. React JS無線電輸入狀態
- 19. 如何聚焦狀態到z3c.form輸入
- 20. Dymola - 狀態機的連續輸入
- 21. 將狀態輸入轉換爲縮寫
- 22. Angular 2獲取輸入驗證狀態
- 23. Saltstack狀態需要交互式輸入
- 24. UML狀態圖 - 進入狀態,而不必調用輸入功能
- 25. 不能正確導入glfw
- 26. 狀態表加入多個狀態
- 27. AJAX驗證輸入,使輸入不可寫入的狀態或難寫
- 28. 處理多個狀態的輸入和狀態變化的最佳方法?
- 29. Keras輸入形狀
- 30. Css輸入形狀
做一些「一幀」並不是一個非常具體的時間值,因爲幀速率可能會有所不同(除非您使用固定的幀速率)。但即使你使用固定的幀速率,那麼如果它是60 FPS,一幀如果只有1/60秒,對於任何人來說真正能夠做出反應的時間很少,用戶認爲只是一個鍵在用戶有機會釋放密鑰之前,按可能被解釋爲多個。如果您有一個單位數的幀速率,這將是可用的唯一方法。 –
我想要做的是讓函數只運行一次邏輯記號,儘管我長時間保持按鍵不變。所以,如果按下空格鍵,只能打印一次。不要再重複它。 – GDN9
啊,這樣更有意義!然後我的答案應該工作得很好。 –