CCRenderTexture saveToFile占用大量内存

时间:2012-10-11 16:29:09

标签: cocos2d-iphone

我正在制作游戏,我想创建每个级别的缩略图,以便我可以在菜单中使用它们。我这样用CCRenderTexture这样做:

CCRenderTexture *renderer = [CCRenderTexture renderTextureWithWidth:bounds.size.width height:bounds.size.height];
ScreenShotLayer *scene = [[ScreenShotLayer alloc] init];
[renderer begin];
[scene visit];
[renderer end];

[renderer saveToFile:[NSString stringWithFormat:@"level%@.png", level.levelId] format: kCCImageFormatPNG];

这一切都运行良好,我的图像被保存,但它占用了大量的内存,从不发布它。没有保存这些数据我的游戏需要8 MB的RAM。当我保存图像时,它需要超过430 MB。

如果我将所有内容保持不变并且只是注释掉saveToFile调用我将回到8 MB内存使用情况。我用泄漏工具调试了它,但没有发现任何泄漏。

这是一个框架问题吗?有没有更好的方法来处理这个?我在做些傻事吗?

我的整个游戏都是开源的,你可以在https://github.com/zgrossbart/bridges获得它。此代码发生在LevelMgr.mm

感谢您的帮助,

扎克

1 个答案:

答案 0 :(得分:0)

我在Cocos2d论坛上找到了解决这个问题的方法,并对代码进行了一些探讨。你可以在她的论坛上阅读:

http://www.cocos2d-iphone.org/forum/topic/48890

我仍然看到CCRenderTexture泄漏了一点内存。 Cocos2d团队对此进行了测试,并表示它正在使用2.1-beta。我的代码也有很大的性能提升。

我正在使用CCRenderTexture来创建Cocos2d场景的缩略图。我通过使用CCRenderTexture创建一个完整大小的图像,然后使用一个特殊的UIImage来调整大小和裁剪图像。最后创建一个我想要的CCRenderTexture,并将我的Cocos2d场景扩展到我想要的大小。