Pygame 绘制大图像时 fps 非常低

Pygame very low fps when drawing large image

我正在编写某种图片查看器,用户可以在其中使用相机 pan/zoom 图片。

用户需要能够放大很多才能看到高分辨率图像的细节。

当图像相对于应用程序大小时 window,我得到大约 300 fps,图像越小,fps 越高。但是,当我放大图像几乎填满应用程序时 window,fps 下降到不到 10fps ...

我的图像是相当高分辨率的 PNG(大部分大约为 2000x1000),但我尝试使用较小的图像,但我遇到了同样的性能问题

我已经搜索了很多解决这个问题的方法,但找不到任何有用的东西。

我已经在使用“convert()”函数(更准确地说是“convert_alpha()”函数)

我使用 pygame.transform.scale 重新缩放图像以模拟相机缩放。这是我的 set_scale() 函数:

    def set_scale(self, factor):
    
        self.original_rect_size *= factor
        self.rect.size = self.original_rect_size
        self.image = pygame.transform.scale(self.original_im, Vector2(self.original_rect_size.x*factor, self.original_rect_size.y*factor))
        self.rect.size = Vector2(self.original_rect_size.x*factor, self.original_rect_size.y*factor)

我用pygame.sprite.LayeredUpdates()对所有图片进行分组绘制

有什么方法可以提高性能吗?我可能做错了什么,因为我是 pygame.

的新手

非常感谢!

pygame.transform.scale 是一个非常昂贵的操作。仅在比例因子变化时缩放图像:

class YouClass:
    def __init__(self):
        # [...]
      
        self.factor = 1

    def set_scale(self, factor):
        if factor != self.factor:
            self.factor = factor
            self.original_rect_size *= factor
            self.rect.size = self.original_rect_size
            self.image = pygame.transform.scale(self.original_im, Vector2(self.original_rect_size.x*factor, self.original_rect_size.y*factor))
            self.rect.size = Vector2(self.original_rect_size.x*factor, self.original_rect_size.y*factor)