0

我正在开发一款游戏,我想创建每个级别的缩略图,以便可以在菜单中使用它们。我用 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中。

谢谢您的帮助,

扎克

4

1 回答 1

0

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

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

我仍然看到 CCRenderTexture 泄漏了一点内存。Cocos2d 团队对此进行了测试,并表示它正在 2.1-beta 中工作。我还可以对我的代码进行很大的性能改进。

我正在使用 CCRenderTexture 创建 Cocos2d 场景的缩略图。我通过使用 CCRenderTexture 创建完整尺寸的图像,然后使用特殊的 UIImage 来调整和裁剪图像的大小来做到这一点。最后创建一个我想要的大小的 CCRenderTexture 并将我的 Cocos2d 场景缩放到我想要的大小会更有效。

于 2012-11-01T13:40:02.763 回答