我正在嘗試編寫一個pong遊戲,在該遊戲中我可以使用向上和向下箭頭移動槳。我創建了一個Paddle對象,每次按下向上鍵時都會按給定量更新(在下面的代碼中作爲參數「num」傳遞)。我想要做的是允許用戶按住向上按鈕,這會導致槳在向上的方向上不斷移動。我試圖在while循環中編寫這個事件處理,但是我陷入了一個無限循環。這是下面的代碼:pygame按住按鍵會導致無限循環
for event in PE.get():
if event.type == PG.KEYDOWN:
keystate = PG.key.get_pressed()
if event.key == PG.K_ESCAPE:
done = True
while keystate[PL.K_UP]:
rightPaddle.update(-20)
if event.type == PG.QUIT:
done = True
下面是槳對象的代碼:
class Paddle(object):
def __init__(self, x, y):
self.topleftx = x
self.toplefty = y
self.width = 15
self.height = 100
def draw(self, surface):
rect = PR.Rect(self.topleftx, self.toplefty, \
self.width, self.height)
surface.fill(WHITE, rect)
def update(self, num):
self.toplefty += num
我查了這個主題的其他計算器的問題,這是我發現PG.key.getPressed( )方法,但其他答案建議使用「精靈」,我不知道如何使用。任何人都可以提供一些關於如何去執行這個任務的建議嗎?
我還是有點困惑。我明白爲什麼現在正在發生無限循環,但我似乎無法想出解決它的方法。即使我定義了一個key_up_pressed變量,我應該在哪裏放置update()方法?它是否仍然在事件驅動的循環? –
不,它應該在你程序的主循環中。 SDL(和Pygame)程序通常由一個主循環構成,該循環處理事件,繪製到屏幕上,並執行需要做的事情(更新物理等)。您想將它放在那裏,因此可以經常更新。一旦它朝着正確的方向移動,嘗試將其與幀速率分離。 – nmichaels