【问题标题】:Pygame loop only upon keypressPygame 仅在按键时循环
【发布时间】:2014-07-16 15:25:18
【问题描述】:

我会提前声明,这几乎与以下问题完全相同:PyGame: Economic way of handling game loops

我想用 pygame 和 pygcurse 制作一个回合制地牢爬行。我已经制作了一个基本模板,如果我只是让主 while 循环以某个 fps 运行,它就可以工作。以这种方式实际实现它对我来说似乎很荒谬。

在按键上迭代 while 循环会简单得多,因为实际上输入之间没有发生任何事情。如果有人想花 15 分钟思考下一步行动,为什么还要让主循环迭代一百万次?

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

是否有一种明显的内在方法可以做到这一点,或者这只是一种非常过时的游戏设计思考方式?

【问题讨论】:

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


    【解决方案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
    

    不过,这对您的游戏设计有极大的限制。动画需要连续执行,在用户计划移动时阻塞直到输入将只允许完全静态的图形。即使在用户采取行动之前游戏没有“反应”,您最终还是需要某种“休息/等待”动画来保持游戏的视觉趣味性。

    此外,如果您有某种动画作为游戏的一部分来对输入做出反应,您将需要包含循环来控制动画并在这些循环期间进行额外的输入检查,如果您希望用户不必等待通过在能够做任何事情(包括关闭游戏)之前的动画。一般来说,除非您有极其有限的特殊情况,否则您通常会更好地使用连续的游戏循环并每次轮询输入。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-13
      • 1970-01-01
      • 2015-05-25
      • 1970-01-01
      相关资源
      最近更新 更多