Cocos2d-x CCSprite Memory Usage ( releasing CCSprite)
Cocos2d-x CCSprite Memory Usage ( releasing CCSprite)
我正在cocos2dx v2.2.3中开发一款游戏。我做了一个测试,我发现了一些问题,如下所示:
问题:(在窗口中(当我运行游戏并检查任务管理器时,我发现我的游戏占用了~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();
(我自己为这个测试创造了这些巨大的图片(
我还检查了m_uReference t->release();
何时打电话。 并且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。(我也知道这不是正确的方法,我错过了其他东西(
首先,你的代码可能会在某个地方崩溃(除非你遗漏了一些代码(: CCSprite::create
返回一个自动发布的CCSprite
,这意味着你不需要.release()
它(如果你不.retain()
它,它将很快被删除(。
对于您的问题:CCSprite
需要一个CCTexture
才能工作(您的图像已加载到内存中(。但是CCSprite
不拥有CCTexture
;CCTexture
由CCTextureCache
管理。
CCTextureCache
不再CCSprite
使用它时直接发布CCTexture
:相反,它会保留CCTexture
以供将来使用(因为加载CCTexture
很昂贵(,并且仅在没有足够的内存或您强制它这样做时才释放CCTexture
,与
CCTextureCache::sharedTextureCache()->removeUnusedTextures();
简短的回答是:除非你有真正的内存问题(由于内存不足而导致游戏崩溃(,否则您不必担心使用的内存。游戏应该使用大量内存。
- CCSprite在Cocos2DX中不充当物理体
- Releasing for Ubuntu
- 从侧面而不是从中心缩放 CCSprite
- 从继承CCSprite的类中创建一个sprite
- 如何将 ccsprite 转换为 ccimage cocos2dx.
- 如何将CCSprite的位置添加到CCParallaxNode
- 如何复制扩展CCSprite的实例
- Cocos2d-x CCSprite->setDisplayFrame AccessViolation crash
- 我怎样才能加快剪辑CCSprite
- 关于CCSprite中的create方法
- Cocos2d-x CCSprite Memory Usage ( releasing CCSprite)