我需要檢查快速按下「D」或「A」鍵兩次,以便讓精靈改變並生成動畫。一旦這個鍵被釋放,精靈應該回到原來的形式。我有一個簡單的圖形,一旦任何一個鍵被按下,它都應該放下來並開始沿任一方向「滾動」,這取決於按下哪個鍵。任何幫助,將不勝感激!如果某個鍵被快速按下兩次,檢測到
回答
Paul_R and Nikola其實已經回答了但是既然你說你是XNA的新手(閱讀:還沒有讀過所有文檔),請允許我介紹一些重要的類:
我們知道鍵盤基本上可以觸發兩種類型的事件: KeyDown
(發佈前正在發佈)和KeyUp
(發佈時)。
當連續發生KeyDown
事件和KeyUp
事件時,將按下一個鍵。我通常爲此存儲2個狀態:
private KeyboardState previousKeyboardState;
private KeyboardState currentKeyboardState;
確保您還導入了使用這些類所需的軟件包。
using Microsoft.Xna.Framework.Input;
雖然可能是低效的,因爲你可以有一個聽衆,我在遊戲主循環更新這兩個狀態:
protected override void Update(GameTime gameTime){
previousKeyboardState = currentKeyboardState;
currentKeyboardState = Keyboard.GetState();
}
如果我想知道,如果一個鍵被按下,我只需要調用此功能:
public bool isKeyPressed(Keys key){
return previousKeyboardState.IsKeyDown(key) && currentKeyboardState.IsKeyUp(key);
}
Keys
是枚舉。它包含鍵盤鍵的枚舉。例如,鍵盤上的字母A由Keys.A
表示。鍵盤按鍵PageDown是Keys.PageDown
。舉例來說,我想知道如果按字母B,我只需要調用使用此語句上述方法:
isKeyPressed(Keys.B); //returns true or false
現在我們知道,如果一個鍵被按下。這就是你的問題出現的地方:我們如何知道一個鍵是否被快速按下兩次。你需要定義什麼快速是。在這個例子中,假設在第一次按下後的1000毫秒內按下某個鍵時,快速按下該鍵。
elapsedTime = gameTime.ElapsedGameTime.TotalMilliseconds;
:你的遊戲主循環接收參數GameTime gameTime.
您可以利用這一點,通過Paul_R的建議
回想一下,使用這一說法得到了以前的更新與上次更新之間的時間注意到我們使用了Milliseconds
財產,而不是Seconds
。這只是爲了一致性。 gameTime.ElapsedGameTime.TotalMilliseconds
是自上次更新後經過的遊戲時間量(以毫秒爲單位)。
這是不是一個真正的優雅的方式來做到這一點,但只是讓你可以明白我的意思,這裏是我做了檢查,如果一個鍵迅速按下一個方法:
public bool isKeyPressedRapidly(Keys key){
return isKeyPressed(key) && elapsedTime <= 1000 && lastKeyPressed == key;
}
elapsedTime
重置每次isKeyPressed(key)
返回true
。在主遊戲循環中增加elapsedTime
,直到按下另一個鍵。 lastKeyPressed
的值就是你按下的最後一個鍵。我會把剩下的留給你。歡呼,玩得開心!
有一個計時器,只要它觸發就將布爾變量設置爲false。將此變量設置爲false並且定時器停止,直到用戶按下D或A鍵。然後啓動計時器。在計時器的滴答事件處理程序中 - 將該變量設置爲false,然後禁用計時器。這樣,您可以將計時器的間隔設置得儘可能小。如果用戶按下A或D,並且布爾變量已經爲true - 那麼你知道它最近被按下了(在你爲該定時器分配的任何間隔內)。這只是許多方法中的一種。
這很好,因爲它使用了內置的事件處理功能,並且會自動將其推送到後臺線程,以便它可以異步執行,並且允許您對允許的間隔進行任意控制 - 您甚至可以構建「雙按靈敏度」設置到遊戲中來調整這個間隔。
對不起,我有點新 - 但是如何在XNA中設置一個計時器? – TheUnrealMegashark
@TheUnrealMegashark你不需要一個計時器,只需在變量中存儲按鍵時間並減去時間 –
好吧,我沒有意識到你正在使用XNA,因此正在處理一個緊湊的框架。但是,基本上所有的計時器都是一個自增的變量。我相信你可以在XNA中使用以下內容來返回自上次更新()以來的時間。嘗試:'gameTime.ElapsedGameTime.TotalSeconds;' – RutledgePaulV
你必須保存最後按下的鍵,按下該按鈕
在按鍵時間:
1.Check the pressed key and compare with previous (stored in variable)
2.If keys matched then subtract the keypress time from lastpressed and previous pressed key
你必須定義在毫秒的時間來檢查是否改變精靈和動畫
3. if the difference in time is less than the defined time then you have to animate
4. Dont forget to set your last pressed key in variable for next keypress comparison
- 1. 檢測,如果Ctrl鍵被按下
- 2. 如何檢測某個特定按鍵是否被按下?
- 3. 檢查某個鍵是否被按下?
- 4. 檢查一個按鍵是否被按下兩次
- 5. 我試圖檢測某個鍵被按下(Python)
- 6. 同時按下兩個鍵時檢測
- 7. 快速檢測返回鍵按下時未使用textFieldDidEndEditing
- 8. 如何檢查一次是否有多個按鍵被按下?
- 9. 如何在A模式下快速連續按兩次A鍵以單鍵按下B鍵?
- 10. 如何檢查批次中是否按下了某個鍵?
- 11. Java檢測鍵被按下的時間
- 12. 檢測刪除鍵被按下
- 13. 如何檢測OS X上是否按下了某個鍵?
- 14. 如何檢測node.js中是否按下了某個鍵?
- 15. 檢測BlackBerry按鍵球/按鍵是否被按下?
- 16. rangeOfString檢測是否有「。」被按下兩次
- 17. 快速鍵盤向上移動兩次
- 18. 快速按下按鈕事件發生兩次
- 19. 當某些Numpad鍵被按下時檢測到,表格不在焦點上
- 20. 檢測哪個按鈕被按下
- 21. Objective-C:在按下另一個鍵時檢測到「shift」按鍵
- 22. 檢測Home按鍵三次
- 23. 如何檢測鍵盤上的刪除鍵何時被按下?
- 24. 如何檢測Windows按鍵是否被按下?
- 25. 如何檢測是否有任何按鍵被按下
- 26. 如何檢測Java 2d中的按鍵是否被按下?
- 27. 如何讓html頁面檢測輸入按鍵被按下?
- 28. 檢測哪個鍵被按下 - 這是一個好方法嗎?
- 29. 如何找到哪個鍵被按下
- 30. performSegueWithIdentifier推動兩個ViewControllers時,按兩次快速
說感謝算法:) –