首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cocos2dx -清除缓存中的特定纹理

Cocos2dx -清除缓存中的特定纹理
EN

Stack Overflow用户
提问于 2014-08-05 19:24:20
回答 2查看 3.2K关注 0票数 0

由于“内存压力”,我正在iPhone 4s上崩溃。我的游戏是这样设置的:

  1. 主场景精灵工作表,总是留在记忆中。
  2. 个人游戏场景水平从个人纹理加载(不是雪碧片)。

当一个级别完成后,我们返回主场景,我希望那些缓存的游戏场景纹理被丢弃。最终会发生的是,当你玩3-4级游戏时,当它耗尽内存时,它就会崩溃,因为它从没有释放过一个级别之后的内存。我不希望水平纹理被缓存超过游戏场景的寿命。当返回主场景时,它需要释放这个内存。

我试着删除所有的游戏场景,孩子们,这对记忆没有任何作用。我已经尝试寻找一种特定的方式来清除这些纹理,我在这个游戏场景中加载了缓存。

有什么建议吗?

EN

回答 2

Stack Overflow用户

发布于 2014-08-05 19:54:06

你在用cocos2d v2吗?您可能有内存泄漏,因为未使用的纹理将在必要时被删除。试着分析你的应用程序,看看你是否有漏洞,它们在哪里。

您也可以在适当的时候调用这些方法,尽管我怀疑您必须:

代码语言:javascript
复制
[[CCTextureCache sharedTextureCache] removeUnusedTextures];
[[CCSpriteFrameCache sharedSpriteFrameCache] removeUnusedSpriteFrames];

但同样,你所描述的听起来更像是内存泄漏。当应用程序收到内存警告时,缓存的数据将被清除。在此清除过程中,在纹理缓存中调用remove未使用纹理方法等。如果你有3/4级别的数据在你离开这些场景很久之后仍然隐藏着,那听起来就像是内存泄漏。

我假设这只发生在访问多个场景之后,问题不在于您的第四个场景只是试图加载设备所能处理的更多数据。

票数 1
EN

Stack Overflow用户

发布于 2014-08-05 21:45:46

您可以删除特定的纹理调用:

在cocos2D-x v3.x中:

代码语言:javascript
复制
Director::getInstance()->getTextureCache()->removeTextureForKey(ImageKeyName)

在cocos2D-x v2.x中:

代码语言:javascript
复制
CCTextureCache::sharedTextureCache()->removeTextureForKey(ImageKeyName);

其中ImageKeyName只是图像的路径(与加载纹理的方式相同)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25146743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档