gpt4 book ai didi

python - Pygame 无限循环与 keydown

转载 作者:太空宇宙 更新时间:2023-11-03 14:34:15 26 4
gpt4 key购买 nike

编辑编号2

我在函数中执行了第二个事件循环来检查是否存在 KEYUP 事件,现在它可以工作了。感谢所有评论的人!

编辑

所以我将显示部分与移动的东西分开,并意识到它实际上没有从键盘获取任何新的输入,所以它不知道 pg.K_s 不再被按下,但现在我不知道如何从我的函数中获取 key_up 事件。我应该再次使用 event.get 吗?

<小时/>

我正在尝试在 Pygame 中制作一个游戏,您可以使用 WASD 来控制角色。我希望所有内容都包含在不同的类和函数中,因此我将角色从主循环移出并移入函数中。不幸的是,现在每当我按下任何 WASD 键时, Sprite 就会无限地朝该方向移动并产生运行时错误。

def moving(self):
counter = 0
loop = pg.key.get_pressed()
for i in range(0, len(loop)):
if loop[i] == 1:
counter += 1
else:
continue
while counter == 1:
pressed = pg.key.get_pressed()
if pressed[pg.K_w]:
if (self.y - 3) >= 0:
self.y -= 3
elif pressed[pg.K_a]:
if (self.x - 3) >= 0:
self.x -= 3
elif pressed[pg.K_s]:
if (self.y + 3) <= 238:
self.y += 3
elif pressed[pg.K_d]:
if (self.x + 3) <= 360:
self.x += 3
self.display.fill((0, 0, 0))
self.display.blit(self.justin, (self.x, self.y))
pg.display.flip()
clock = pg.time.Clock()
clock.tick(100)
counter = 0
loop = pg.key.get_pressed()
for i in range(0, len(loop)):
if loop[i] == 1:
counter += 1
else:
continue

这是调用移动函数的代码:

while True:
for event in pg.event.get():
if event.type == pg.QUIT:
pg.display.quit()
pg.quit()
elif event.type == pg.KEYDOWN:
if (event.key == pg.K_w or event.key == pg.K_a
or event.key == pg.K_s or event.key == pg.K_d):
self.moving()

老实说,我不知道从哪里开始 - 一旦停止按下按钮,计数器应该保持在 0,因此 while 循环将关闭,但它只是无限地将 Sprite 发送到边缘屏幕。

最佳答案

假设您试图在按住鼠标按钮时使角色连续移动(如果您想让它逐步移动,则只需单独检查按键并对 x 和 y 进行加/减),您最好放弃计数器,而是在事件循环之外放置如下内容:

keys=pg.key.get_pressed()
if keys[pg.K_w]:
if x >= 0: x -= 3
if keys[pg.K_s]:
if x <= 360: x += 3
if keys[pg.K_a]:
if y >= 0: y -= 3
if keys[pg.K_d]:
if y <= 238: y += 3

关于python - Pygame 无限循环与 keydown,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47078562/

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