gpt4 book ai didi

python - Pygame 按住键会导致无限循环

转载 作者:行者123 更新时间:2023-12-01 05:31:29 26 4
gpt4 key购买 nike

我正在尝试编写一个乒乓球游戏,在其中我可以使用向上和向下箭头移动 Racket 。我创建了一个 Paddle 对象,每次按下向上键时,该对象都会更新给定量(在下面的代码中作为参数“num”传递)。我想要做的是允许用户按住向上按钮,这将导致桨不断向上移动。我尝试在 while 循环中编写此事件处理,但陷入了无限循环。下面是代码:

    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

下面是 Paddle 对象的代码:

    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

我检查了有关此主题的其他 stackoverflow 问题,这就是我找到 PG.key.getPressed() 方法的方法,但其他答案建议使用“ Sprite ”,我不确定如何使用。有人可以就如何执行此任务提供一些建议吗?

最佳答案

while 循环的问题在于它正在评估一个 keydown 事件。该事件将始终是它开始时的任何内容,并且它没有机会在事件处理代码中进行更改。您想要捕获的是紧随其后的 PG.KEYUP 事件。所以你会得到(逻辑上)类似的东西

if event.type == PG.KEYDOWN and keystate[PL.K_UP]:
key_up_pressed = True
elif event.type == PG.KEYUP and keystate[PL.K_UP]:
key_up_pressed = False

显然,您可以更好地考虑这一点,但是 key_up_pressed 状态将在您的主循环中每隔一段时间(帧、毫秒等)进行评估,然后移动拨片。

关于python - Pygame 按住键会导致无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20157323/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com