gpt4 book ai didi

python - Pygame - transform.rotate 结果使用了大量 RAM

转载 作者:行者123 更新时间:2023-11-28 22:01:59 26 4
gpt4 key购买 nike

所以,我正在制作这个你有手电筒的小游戏。手电筒的分辨率很高,所以我需要为每个角度预缓存它的 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))

手电筒图像经过 convert()ed,没有色键或 alpha channel 。

显示手电筒:

def flashlightupdate(angle):
screen.blit(init.flashlights[angle], (340 - init.flashlights[angle].get_width()/2, 360 - init.flashlights[angle].get_height()/2))

角度是度数,根据鼠标的位置和玩家的位置计算得出。

谢谢。

最佳答案

我打算将此作为答案发布,因为将一些评论组合在一起可能会解决内存和性能问题。

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

显然,要避免使用 800MB 的 RAM,您必须避免创建所有这些图像。

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

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

关于python - Pygame - transform.rotate 结果使用了大量 RAM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12212872/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com