Cocos2dx -清除缓存中的特定纹理
Cocos2dx - Clearing specific textures from the cache
我的iPhone 4s因为"内存压力"而崩溃。我的游戏是这样设置的:
- 始终留在内存中的主场景精灵表。
- 单个游戏场景关卡从单个纹理加载(不是精灵表)。
当关卡完成并返回主场景时,我希望那些缓存的游戏场景纹理能够被丢弃。最终的结果是,当你玩完3-4个关卡时,它会因为内存耗尽而崩溃,因为它不会在关卡后释放这些内存。我不希望关卡纹理在游戏场景的生命周期之后被缓存。当返回到主场景时,它需要释放该内存。
我已经试过删除所有的游戏场景的孩子,不做任何记忆。我试着寻找一种特定的方式来清除这些纹理,我已经从缓存中加载了这个游戏场景。
有什么建议吗?
您使用cocos2d v2吗?您可能有内存泄漏,因为在必要时删除未使用的纹理。试着分析你的应用,看看你是否有漏洞,以及它们在哪里。
您也可以在适当的时候自己调用这些方法,尽管我怀疑您必须这样做:
[[CCTextureCache sharedTextureCache] removeUnusedTextures];
[[CCSpriteFrameCache sharedSpriteFrameCache] removeUnusedSpriteFrames];
但是你所描述的听起来更像是内存泄漏。当应用程序收到内存警告时,缓存的数据将被清除。在此清除期间,除去未使用的纹理方法在纹理缓存上被调用。如果在您退出这些场景很久之后仍有3/4级数据潜伏在周围,这听起来像是内存泄漏。
我假设这只发生在访问多个场景之后,问题不在于你的第四个场景只是试图加载更多的数据,而不是设备可以处理。
你可以通过调用
删除特定的纹理在cocos2D-x v3。x:
Director::getInstance()->getTextureCache()->removeTextureForKey(ImageKeyName)
在cocos2D-x v2。x:
CCTextureCache::sharedTextureCache()->removeTextureForKey(ImageKeyName);
其中ImageKeyName只是图像的路径(与您用于加载纹理的路径相同)
相关文章:
- OpenInventor从9.8升级到10.4.2后,GLSL纹理返回零
- SFML纹理像播放器
- OpenGL大的3D纹理(>2GB)非常慢
- UE4-如何在给定4个屏幕坐标的情况下缩放纹理或材质
- 清除前检查矢量
- 着色器纹理值与创建纹理时写入的值不同
- OpenGL将纹理四边形渲染为(0,0)
- 宽度为奇数的16位纹理为片状
- ifstream文件在从行中读取时被清除
- 使用 CUDA 和纹理进行图像减法
- WINAPI 注册应用程序重新启动时不清除打开的套接字
- 在不使用统一的情况下将纹理传递给 GLSL 着色器?
- 将使用太多的纹理插值器 - 带旋转的着色器
- dx11 渲染到纹理仅显示透明颜色
- OpenGL 4.3 错误地将第 4 个纹理坐标映射到与第 3 个纹理坐标相同的位置
- 如何清除/清空已打开的文件C++
- 如何使用 DXGI 格式DXGI_FORMAT_R1_UNORM创建 2D 纹理?
- 纹理单位重叠?渲染了错误的纹理
- SFML 纹理变换(放大)
- Cocos2dx -清除缓存中的特定纹理