【发布时间】:2014-04-26 16:18:11
【问题描述】:
我正在 cocos2dx v2.2.3 中开发游戏。我做了一个测试,发现问题如下:
问题:(在 Windows 中)当我运行游戏并检查 TaskManager 时,我发现我的游戏占用了大约 20MB 内存(平均)。
但是在我的游戏Layer 的Init() 中添加这几行代码之后,它会将内存使用量增加到300MB。
CCSprite *t;
t = CCSprite::create("Character/foo1.png"); //Each picture is about 50MB
t->release();
t = CCSprite::create("Character/foo2.png");
t->release();
t = CCSprite::create("Character/foo3.png");
t->release();
t = CCSprite::create("Character/foo4.png");
t->release();
(我自己为这个测试创建了这些巨大的图片)
t->release(); 调用时,我还检查了 m_uReference。并且m_uReference 变成了0,所以它应该被删除!但是为什么内存使用率那么高呢?
问题:我想知道一段时间后我应该如何删除/移除/释放 CCSprite?
其他信息/测试:
我发现了一些可能有帮助的东西。致电t->release(); 后到达某处:
CCSprite::~CCSprite(void) {
CC_SAFE_RELEASE(m_pobTexture);
}
但是在CC_SAFE_RELEASE(m_pobTexture);,m_uReference 的纹理从 2 减少到 1,因此纹理不会被删除。
我做了一个测试并做出了这个改变:
CCSprite::~CCSprite(void) {
CC_SAFE_RELEASE(m_pobTexture);
CC_SAFE_RELEASE(m_pobTexture);
}
RAM 恢复到 ~20MB。 (我也知道这不是正确的方法,我还遗漏了其他东西)
【问题讨论】:
-
cocos2d-iphone 有一个纹理缓存,我想 cocos2d-x 也有一个。尝试清除它。
-
@LearnCocos2D 我同意你关于缓存的可能性,但无法清除或删除它。对不起,你知道怎么做吗?
-
@LearnCocos2D 你能回答我的第二个问题吗? (关于更改现有 ccsprite 图像的最佳方法)
-
改变它的纹理,它必须有一个属性。至于缓存,请检查 API 参考或在 API 参考中搜索“缓存”或“纹理缓存”的代码。