为了账号安全,请及时绑定邮箱和手机立即绑定

Python Pygame 事件列表双实体且很长

Python Pygame 事件列表双实体且很长

隔江千里 2023-01-04 16:49:50
好的,我在 Ubuntu Linux 操作系统上使用 Python3。我有一个非常简单的机器人,当我按下箭头键时它会移动。我的问题是,当我在 pygame 事件列表中读取时,它包含 328 个按下相同键的元素。因此,我无法用我的机器人改变方向,因为我在收到 328 次信号后才收到信号。有没有解决问题的方法。我的代码如下所示:for event in pygame.event.get():    if event.type == pygame.QUIT:        pygame.quit()    keys = pygame.key.get_pressed()    for key in keys:        if keys[pygame.K_LEFT]:            self.map.move(self.map.x1 - 1, self.map.y1 + 0)        elif keys[pygame.K_RIGHT]:            self.map.move(self.map.x1 + 1, self.map.y1 + 0)        elif keys[pygame.K_UP]:            self.map.move(self.map.x1 + 0, self.map.y1 + 1)        elif keys[pygame.K_DOWN]:            self.map.move(self.map.x1 + 0, self.map.y1 - 1)x1 和 y1 是我的机器人的坐标。
查看完整描述

2 回答

?
白衣染霜花

TA贡献1796条经验 获得超10个赞

如果在事件处理程序中处理按键按下事件可能更方便:


for event in pygame.event.get():

    if event.type == pygame.QUIT:

        pygame.quit()

    elif event.type == pygame.KEYDOWN:

        if event.key == pygame.K_LEFT:

            self.map.move(self.map.x1 - 1, self.map.y1 + 0)

        elif event.key == pygame.K_RIGHT:

            self.map.move(self.map.x1 + 1, self.map.y1 + 0)

        elif event.key == pygame.K_UP:

            self.map.move(self.map.x1 + 0, self.map.y1 + 1)

        elif event.key == pygame.K_DOWN:

            self.map.move(self.map.x1 + 0, self.map.y1 - 1)

这应该可以防止多次处理同一个按键。


查看完整回答
反对 回复 2023-01-04
?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

您不需要遍历按下的键。只需删除并移动事件循环外部的for key in keys:序列。if ... elif


for event in pygame.event.get():

    if event.type == pygame.QUIT:

        pygame.quit()


keys = pygame.key.get_pressed()


if keys[pygame.K_LEFT]:

    self.map.move(self.map.x1 - 1, self.map.y1 + 


elif keys[pygame.K_RIGHT]:

    self.map.move(self.map.x1 + 1, self.map.y1 + 0)


elif keys[pygame.K_UP]:

    self.map.move(self.map.x1 + 0, self.map.y1 + 1)


elif keys[pygame.K_DOWN]:

    self.map.move(self.map.x1 + 0, self.map.y1 - 1)

pygame.key.get_pressed()检查调用函数时按下了哪些键,您通常希望在每个主循环中调用一次,但绝对不在循环中检查事件。


查看完整回答
反对 回复 2023-01-04
  • 2 回答
  • 0 关注
  • 129 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信