游戏变换.旋转结果使用了大量的RAM

2024-09-27 21:24:18 发布

您现在位置:Python中文网/ 问答频道 /正文

所以,我在做一个小游戏,你有一个手电筒。手电筒的分辨率很高,所以我需要为每个角度预存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}$

角度是度,根据鼠标的位置和玩家的位置来计算。在

谢谢。在


Tags: 图像游戏kbpnginit副本分辨率空间
2条回答

我将作为一个答案发表这篇文章,因为将一些评论组合在一起,您可能会同时解决内存和性能问题。在

RAM的高使用率是由于图像的数量(360),即使在磁盘上,也至少会占用至少266MB,正如Dikei所指出的,而且您必须考虑图像被表示为pygame对象,因此比原始位图使用更多的内存。在

为了避免使用800MB的RAM,显然,必须避免创建所有这些映像。在

为了保持良好的性能,您只能缓存一些0-90度的图像, 然后使用翻转操作(比旋转快得多)来为其他旋转角度构建图像(如halex所指出)。在

通过这种方式,您肯定可以消耗当前RAM的1/4,并且仍然具有相当的渲染速度。在

如果你必须有这么多的旋转,创建一个pyOpenGL矩形,设置你的手电筒纹理。然后旋转那个。在

可以使用pygame创建/输入窗口,使用pygame表面创建OpenGL纹理,或者使用Pyglet或其他解决方案。在

相关问题 更多 >

    热门问题