微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决捕获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 举报,一经查实,本站将立刻删除。