gpt4 book ai didi

c++ - Cocos2d-x CCSprite内存使用(释放CCSprite)

转载 作者:太空狗 更新时间:2023-10-29 20:59:59 25 4
gpt4 key购买 nike

我正在 cocos2dx v2.2.3 中开发游戏。我做了一个测试,我发现了一些问题如下:

问题::(在 Windows 中)当我运行我的游戏并检查任务管理器时,我发现我的游戏占用了大约 20MB 内存(平均)。

但是在我的游戏 LayerInit() 中添加这些代码行之后,内存使用量增加了 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。 (我也知道这不是正确的方法,我还遗漏了其他东西)

最佳答案

首先,您的代码可能会在某个地方崩溃(除非您遗漏了一些代码):CCSprite::create 返回一个自动释放的 CCSprite,这意味着您不需要 .release() 它(如果你不需要 .retain() 它,它很快就会被删除)。

对于您的问题:CCSprite 需要一个CCTexture 才能工作(您的图像已加载到内存中)。但是 CCSprite 不拥有 CCTextureCCTextureCCTextureCache 管理。

CCTextureCache 当没有 CCSprite 使用它时,不要直接释放 CCTexture:相反,它保留 CCTexture 以供将来使用(因为加载 CCTexture 很昂贵)并且仅在内存不足或您强制它这样做时才释放 CCTexture,使用

CCTextureCache::sharedTextureCache()->removeUnusedTextures();

简短的回答是:除非您有真正的内存问题(由于内存不足导致游戏崩溃),否则您不必担心内存使用问题。游戏应该使用大量内存。

关于c++ - Cocos2d-x CCSprite内存使用(释放CCSprite),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23313528/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com