Pygame仅在按键时循环

时间:2014-07-16 02:51:44

标签: python python-3.x pygame game-engine

我将事先声明这几乎与PyGame: Economic way of handling game loops

完全相同

我想用pygame和pygcurse进行回合制的地下城爬行。我已经制作了一个基本模板,如果我让主while循环进入某个fps。这对我实际上以这种方式实现它似乎很荒谬。

将while循环迭代到按键上会复杂得多,因为输入之间几乎没有任何事情发生。如果有人想在15分钟内考虑下一步行动,为什么要让主循环迭代一百万次?

我在pygcurse.waitforkeypress()和pygame.event.wait()上尝试了各种变体。我可以让循环等待按键,但是按键似乎没有进入队列,因此角色不再移动(我知道它在每个按键上只循环一次,尽管没有移动,因为我把计数器用于调试目的)。

有没有明显的内在方法来做到这一点,或者这只是一种考虑游戏设计的过时方式?

1 个答案:

答案 0 :(得分:1)

您提到的问题确实包含了您需要的大部分内容。只需根据您的需要过滤事件,然后使用event.wait阻止执行,直到新事件进入队列。确保窗口有焦点或者不能按下按键。

import pygame

pygame.init()
screen = pygame.display.set_mode((400,400))

pygame.event.set_allowed(None)
pygame.event.set_allowed([pygame.QUIT, pygame.KEYDOWN])

while True:
    e = pygame.event.wait()
    print e

但这对您的游戏设计极为有限。动画需要连续执行,阻塞直到输入只允许完全静态的图形,而用户正在计划移动。即使没有"反应"从游戏直到用户采取行动,你最终会想要某种“休息/等待”#34;动画让游戏视觉上有趣。

此外,如果你有某种动画作为游戏对输入的反应,你需要包含循环来控制动画,并在这些循环中进行额外的输入检查,如果你想让用户不必在能够做任何事情之前等待动画(包括关闭游戏)。一般来说,除非你的特殊情况非常有限,否则你通常会在连续游戏循环和每次轮询输入方面做得更好。