我在pygame中遇到一些性能问题,因此我正在尝试优化渲染。
目前,我正在将背景图像拖到显示缓冲区中:
self.display.blit(self.bg, (0, 0))
相反,我正在寻找一种用背景表面的副本替换缓冲区并绘制的方法。这样,我不必每帧都放大大图像,从而节省了一些时间。
有什么办法吗?
最佳答案
隔多长时间在屏幕表面抹一下东西并不重要,因为只有在调用pygame.display.update
或pygame.display.flip
后,显示屏才会更新。
如果确定将整个背景图像拖到屏幕表面是游戏的瓶颈,则可以尝试以下操作:
a)使用clear()
函数从屏幕上“擦除”子画面,而不是在每帧前擦除整个背景。
b)不用在没有参数的情况下调用pygame.display.flip
或pygame.display.update
,而是在屏幕上已更改的区域列表中调用pygame.display.update
,这是由draw()
函数返回的(可能与clear()
结合使用) >)。
c)使用FULLSCREEN
,DOUBLEBUF
和HWSURFACE
标志创建显示表面。
但是正如我已经说过的:请确保您知道瓶颈在哪里。一些常见的性能陷阱是:从磁盘多次加载图像,字体渲染,使用不同的像素格式(例如,在从图像创建的表面上不调用convert
/ convert_alpha
)以及通常缺乏缓存。
(另请注意,在创建对图形要求很高的游戏时,通常不是python / pygame的首选)
关于python - 更换表面而不是爬取表面,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53154044/