Python Pygame 事件列表双实体且很长
Python Pygame Event List double enties and very long
好的,我正在使用 Python3 和 Ubuntu Linux OS。
我有一个非常简单的机器人,当我按下箭头键时它会移动。我的问题是,当我读入 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 是我的机器人的坐标。
您不需要循环按下的键。只需删除 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()
检查调用函数时按下了哪些键,您通常希望在每个主循环中调用一次,但绝对不会在循环中检查事件。
如果在事件处理程序中处理按键按下事件可能更方便:
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)
这应该可以防止多次处理同一个按键。
好的,我正在使用 Python3 和 Ubuntu Linux OS。
我有一个非常简单的机器人,当我按下箭头键时它会移动。我的问题是,当我读入 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 是我的机器人的坐标。
您不需要循环按下的键。只需删除 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()
检查调用函数时按下了哪些键,您通常希望在每个主循环中调用一次,但绝对不会在循环中检查事件。
如果在事件处理程序中处理按键按下事件可能更方便:
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)
这应该可以防止多次处理同一个按键。