我在pygame中遇到一些性能问题,因此我正在尝试优化渲染。

目前,我正在将背景图像拖到显示缓冲区中:

self.display.blit(self.bg, (0, 0))


相反,我正在寻找一种用背景表面的副本替换缓冲区并绘制的方法。这样,我不必每帧都放大大图像,从而节省了一些时间。

有什么办法吗?

最佳答案

隔多长时间在屏幕表面抹一下东西并不重要,因为只有在调用pygame.display.updatepygame.display.flip后,显示屏才会更新。

如果确定将整个背景图像拖到屏幕表面是游戏的瓶颈,则可以尝试以下操作:

a)使用clear()函数从屏幕上“擦除”子画面,而不是在每帧前擦除整个背景。

b)不用在没有参数的情况下调用pygame.display.flippygame.display.update,而是在屏幕上已更改的区域列表中调用pygame.display.update,这是由draw()函数返回的(可能与clear()结合使用) >)。

c)使用FULLSCREENDOUBLEBUFHWSURFACE标志创建显示表面。

但是正如我已经说过的:请确保您知道瓶颈在哪里。一些常见的性能陷阱是:从磁盘多次加载图像,字体渲染,使用不同的像素格式(例如,在从图像创建的表面上不调用convert / convert_alpha)以及通常缺乏缓存。

(另请注意,在创建对图形要求很高的游戏时,通常不是python / pygame的首选)

关于python - 更换表面而不是爬取表面,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53154044/

10-12 19:14