所以,我在做一个小游戏,你有一个手电筒。手电筒的分辨率很高,所以我需要为每个角度预存360个副本,以避免实时旋转它,这将需要大量的计算能力。图像是1002x246和.png,但非常简单,因此它只占用硬盘3.95KB的空间。但当我在游戏中制作360个副本并将它们添加到列表中时,它们会占用大约800MB的内存。真是太多了。为什么?我怎样才能减少呢?在
代码:
def flashlightinit():
init.flashlights = []
fl = files.flashlight
for i in range(360):
init.flashlights.append(pygame.transform.rotate(fl, -i))
手电筒图像是convert()的,没有colorkey或alpha通道。在
显示手电筒:
^{pr2}$角度是度,根据鼠标的位置和玩家的位置来计算。在
谢谢。在
我将作为一个答案发表这篇文章,因为将一些评论组合在一起,您可能会同时解决内存和性能问题。在
RAM的高使用率是由于图像的数量(360),即使在磁盘上,也至少会占用至少266MB,正如Dikei所指出的,而且您必须考虑图像被表示为pygame对象,因此比原始位图使用更多的内存。在
为了避免使用800MB的RAM,显然,必须避免创建所有这些映像。在
为了保持良好的性能,您只能缓存一些0-90度的图像, 然后使用翻转操作(比旋转快得多)来为其他旋转角度构建图像(如halex所指出)。在
通过这种方式,您肯定可以消耗当前RAM的1/4,并且仍然具有相当的渲染速度。在
如果你必须有这么多的旋转,创建一个pyOpenGL矩形,设置你的手电筒纹理。然后旋转那个。在
可以使用pygame创建/输入窗口,使用pygame表面创建OpenGL纹理,或者使用Pyglet或其他解决方案。在
相关问题 更多 >
编程相关推荐