【问题标题】:PyGame: Economic way of handling game loopsPyGame:处理游戏循环的经济方式
【发布时间】:2014-03-31 15:20:36
【问题描述】:

我使用 pygame 编写了一个小脚本(实际上不是视频游戏,而是模拟结果的图形显示,如果这很重要),但我对它等待用户事件的方式并不满意(在我的情况下,我是只对键盘上的几个键感兴趣)。

它使用:

running = True
while running:
    for event in pygame.event.get():
        #tests and hypothetical actions

即使用户不执行任何操作,此循环也会使 CPU 内核饱和,这意味着对 CPU 的无用压力、热量、风扇噪音,甚至可能会出现延迟。有没有更聪明的,即。更经济的方式,将程序置于事件等待模式而不使用无限循环,但仍使用 pygame。

【问题讨论】:

  • 我怀疑任何人在个人层面上所做的任何事情都会饱和 CPU 内核。
  • @sshashank124:我所说的 saturate 是指使用它@ 100% ,我只是仔细检查了一下,确实如此。
  • 我认为最接近的方法是添加 timer.tick() 方法来控制最大 FPS。除此之外,我不知道有什么办法。

标签: python pygame


【解决方案1】:

您唯一能做的就是阻止您不打算使用的事件:

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

这只会将pygame.QUITpygame.KEYDOWN 等事件发布到队列中。

如果没有新的按键,则事件队列中没有任何内容,因此不执行循环。

正如 sshashhank124 在 cmets 中所说,您还可以通过调用

来减慢主循环
clock.tick(frames)

这将导致 pygame 休眠一段时间,以便调用方法 tick 每秒帧次。

【讨论】:

  • 我要补充一点,可以使用pygame.event.wait() 代替get()/tick() 组合来等待事件。但它会阻止程序更新屏幕,从而导致黑屏。
  • 谢谢,添加:clock.tick(10) 解决了我的问题(我还添加了您的事件过滤器)。再次感谢;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-11
  • 1970-01-01
  • 2013-07-25
  • 1970-01-01
  • 2016-03-26
  • 2014-01-21
  • 1970-01-01
相关资源
最近更新 更多