首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pygame - transform.rotate结果使用了大量内存

Pygame - transform.rotate结果使用了大量内存
EN

Stack Overflow用户
提问于 2012-08-31 17:47:47
回答 2查看 810关注 0票数 2

所以,我做了一个小游戏,里面有一个手电筒。手电筒的分辨率相当高,所以我需要为每个角度预先复制360份,以避免实时旋转它,这将占用大量的计算能力。图像是1002x246和.png,但是非常简单,所以它在硬盘上只占3.95KB。但当我在游戏中制作360份拷贝并将它们添加到列表中时,它们需要大约800MB的RAM。这是相当多的。为什么?我怎样才能减少它?

代码:

代码语言:javascript
复制
def flashlightinit():
    init.flashlights = []
    fl = files.flashlight
    for i in range(360):
        init.flashlights.append(pygame.transform.rotate(fl, -i))

手电筒图像是convert()格式的,没有颜色键或alpha通道。

显示手电筒:

代码语言:javascript
复制
def flashlightupdate(angle):
    screen.blit(init.flashlights[angle], (340 - init.flashlights[angle].get_width()/2, 360 - init.flashlights[angle].get_height()/2))

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

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-31 20:01:41

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

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

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

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

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

票数 3
EN

Stack Overflow用户

发布于 2012-09-04 09:58:44

如果您必须有那么多旋转,请创建一个pyOpenGL矩形,将纹理设置为手电筒。然后旋转它。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12212872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档