捕获pygame屏幕的性能节省方式? 基于线程?

问题描述

我在 pygame 中编写了一个小游戏。我正在尝试实现一个功能,在用户按下一个键后,游戏开始将每一帧保存为图像,直到再次按下该键。 显然,如果它是由主线程保存的,这将对游戏的帧率有害,因此目前我正在尝试使用帧缓冲区和第二个线程使其工作,如下所示:

framebuffer = deque([])
class frameSaver:
    def __init__(self):
        self._running = True
    def terminate(self):
        self._running = False
    def run(self):
        global framebuffer
        while self._running:
            while len(framebuffer) > 0:
                frame,framename = framebuffer.popleft()
                pygame.image.save(frame,'capture\\'+str(framename)+'.png')

我的程序中的主循环在每次帧更新后将一个包含 pygame 显示表面副本和当前帧编号的元组附加到帧缓冲区。

我原以为这会使我的代码更快,因为保存图像将主要是 io 绑定任务,但它反而使我的游戏 fps 下降到个位数。我怀疑罪魁祸首是 GIL 或 pygame 本身的某些东西,所以我想知道是否有人知道另一种将 pygame 表面保存为图像的方法,或者更好的方法

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)