2016-09-26 86 views
0

我目前正在嘗試在python中創建一個小遊戲,但是當我嘗試使用keydown/keyup事件時,我的系統會將這兩個事件解釋爲一個。我寫了一個簡單的腳本來監視由'pygame'(一個簡化python遊戲的模塊)創建的事件,當我按下一個鍵時,它立即在python shell中顯示keydown和keyup事件:code screenshot。這與我的鍵盤有關嗎?在Python中使用keydown/keyup的基本輸入

+0

請閱讀[this](http://stackoverflow.com/help/mcve)。提供代碼的相關部分。複製並粘貼純文本,不要發佈屏幕截圖。 – timgeb

+0

好吧,我添加了代碼的截圖,但是我沒有將它放在第一位,因爲這很可能與我的問題無關。 – samYemmY

+0

爲了將來的使用:問題編輯器中有「代碼」標籤。如果代碼太多,請使用pastebin.org或類似的代碼。 –

回答

0

KEYDOWN事件之後緊接着的KEYUP事件的問題是由display = pygame.display.set_mode((800, 600))行在您的主循環中造成的。該程序正在循環的每次迭代中創建一個新的顯示。這一行,需要放在主循環之前,因爲它應該放在主循環之前。這與pygame.display.set_caption()一樣,因爲它只需要調用一次。

這樣做應該通過KEYUP事件清除你的問題;然而,按住鍵仍然不會工作,因爲Pygame初始化時默認關閉鍵重複。要啓用它,必須調用pygame.key.set_repeat(delay, interval)方法。這也應該在你的主循環之前。

在該方法中,值delay是第一次按鍵重複發生之前的延遲將以毫秒爲單位發生,如果它設置爲零,則鍵重複將被禁用。值interval是第一次之後每個連續重複之間的時間。這個文檔可以發現here in the Pygame documantation,其中描述如下:

啓用鍵盤重複,保留的向下鍵將產生多個pygame.KEYDOWN事件。延遲是第一次重複pygame.KEYDOWN發送之前的毫秒數。之後,另一個pygame.KEYDOWN將每間隔毫秒發送一次。如果沒有參數通過,則重複鍵被禁用。

pygame初始化時,密鑰重複被禁用。

作爲一個例子:pygame.key.set_repeat(1, 15)將基本上沒有延遲,應該提供一個大體上平穩的旅行。

相關問題