【发布时间】:2012-08-31 09:47:46
【问题描述】:
所以,我正在制作这个你有手电筒的小游戏。手电筒的分辨率相当高,所以我需要为每个角度预缓存它的 360 个副本,以避免实时旋转它,这会占用大量的计算能力。图像是 1002x246 和 .png,但非常简单,所以它只占用了 3.95KB 的硬盘驱动器。但是当我在游戏中制作 360 个副本并将它们添加到列表中时,它们会占用大约 800MB 的 RAM。这是相当多的。为什么?我怎样才能减少它?
代码:
def flashlightinit():
init.flashlights = []
fl = files.flashlight
for i in range(360):
init.flashlights.append(pygame.transform.rotate(fl, -i))
手电筒图像经过转换()处理,没有颜色键或 alpha 通道。
显示手电筒:
def flashlightupdate(angle):
screen.blit(init.flashlights[angle], (340 - init.flashlights[angle].get_width()/2, 360 - init.flashlights[angle].get_height()/2))
角度是度数,由鼠标的位置和玩家的位置计算得出。
谢谢。
【问题讨论】:
-
首先,为什么每 360 个圆圈需要一张图片?玩家的“手电筒方向控制”有多精细?
-
它需要尽可能细粒度,但游戏目前有一个低分辨率选项,需要大约 200MB 的 RAM,但是游戏需要每隔一次变换.scale2x 低分辨率手电筒框架。手电筒随着鼠标的移动而旋转。
-
你给
flashlightinit()打了多少次电话? -
制作这些副本是一种提高性能的紧急解决方案,所以如果有任何其他方法可以快速完成这项工作,那就太好了。
-
flashlightinit() 在启动时只被调用一次。