1

pygame.time.set_timer(event,milliseconds)用来将 2 个 USEREVENT 添加到队列中;USEREVENT+1 每秒(1000 毫秒),USEREVENT 每 5 毫秒。这应该意味着我得到的每个 USEREVENT+1 都会得到 200 个 USEREVENT。我只收到 100 个事件。

似乎 10ms 是计时器可以有的最小延迟。我正在尝试使用它来控制我的 FPS,并且 USEREVENT+1 发出信号以通过滴答声“更新”游戏逻辑,但是如果计时器的上限为 10 毫秒,那么这意味着我不能超过100 帧/秒。有谁知道为什么?

另外,对于加分,毫秒必须是整数,这意味着我只能有一个 1000 的倍数的 fps(例如 10、20、25、50、100)。你认为我怎样才能用这种方法达到 60fps?最初,我一直在睡觉直到下一帧的时间,但我希望它对 CPU 有好处,所以我想在滴答声之间闲置。这就是我使用 pygame.time.set_timer 的原因,因为 pygame.event.wait 在队列中出现事件之前一直处于空闲状态。

4

1 回答 1

1

要限制 FPS,请使用:Clock.tick(fps_cap)

http://www.pygame.org/docs/ref/time.html#Clock.tick 这个方法应该每帧调用一次。它将计算自上次调用以来经过了多少毫秒。

如果您传递可选的帧速率参数,该函数将延迟以使游戏运行速度低于给定的每秒滴答数。这可以用来帮助限制游戏的运行速度。通过每帧调用一次 Clock.tick(40),程序将永远不会以每秒超过 40 帧的速度运行。

请注意,此函数使用 SDL_Delay 函数,该函数并非在每个平台上都准确,但不会使用太多 cpu。如果您想要一个准确的计时器,请使用 tick_busy_loop,并且不介意咀嚼 cpu。

于 2012-10-29T03:21:26.370 回答