2 回答

TA貢獻1828條經驗 獲得超13個贊
您確實需要用于檢查事件循環中的鍵的代碼。
你說當你修復游戲變得無法玩,因為你不得不反復敲擊鍵,因為按住鍵沒有任何作用。按鍵被按下是一個事件,它只在按鍵被按下時發生。當一個鍵被釋放時,你也會得到一個事件,但是當它被按住時沒有生成任何事件。但是,有一些方法可以解決這個問題。
以下是解決該問題的一些方法:
我喜歡重復鍵的方法,這就是我將首先介紹它的原因。
你可以告訴 pygame 你希望它在按鍵被按下時重復給你按鍵事件。這類似于許多系統在按下某個鍵時所做的事情。您可以通過告訴 pygame 您希望它在按住鍵時定期為您提供 KEYDOWN 事件來獲得它。您使用命令pygame.key.set_repeat(delay, interval)
(此處為文檔)?;旧希琾ygame 會在按下某個鍵時為您偽造 KEYDOWN 事件。是delay
在發送第一個重復鍵事件之前需要按住一個鍵的時間,以及interval
您希望在初始延遲后重復該事件的頻率。
你也可以用另一種方式來做。您無需在按鍵被按下時做出反應,而是跟蹤您希望游戲做出反應的按鍵狀態。當您獲得KEYDOWN
這些鍵之一的事件時,您會設置一個狀態變量,指示該鍵已被按下。當您獲得該鍵的相應KEYUP
事件時,您將清除該變量。然后在事件循環之外,只要按住鍵并設置狀態,您就可以對這些鍵狀態變量做出反應以使事情發生。
還有一種方法,您可以使用 詢問 pygame 當前按下的鍵是什么pygame.key.get_pressed()
。然后從返回中解析出當前按下的鍵。請在此處查看文檔。
如果您使用,get_pressed()
您仍然需要一個事件循環來處理事件,否則 pygame 將不會處理事件并且您的游戲將無響應。您也可以使用它pygame.event.pump()
來防止這種停頓。

TA貢獻1765條經驗 獲得超5個贊
event
對于第一個 for 循環是局部的。循環結束后將event
超出范圍。 if event.type == pygame.KEYDOWN and event.key == pygame.K_UP and igralec.y > 10: igralec.y -= 5
在 for 循環之外,這是此錯誤的原因。
添加回答
舉報