由于“内存压力”,我正在iPhone 4s上崩溃。我的游戏是这样设置的:
当一个级别完成后,我们返回主场景,我希望那些缓存的游戏场景纹理被丢弃。最终会发生的是,当你玩3-4级游戏时,当它耗尽内存时,它就会崩溃,因为它从没有释放过一个级别之后的内存。我不希望水平纹理被缓存超过游戏场景的寿命。当返回主场景时,它需要释放这个内存。
我试着删除所有的游戏场景,孩子们,这对记忆没有任何作用。我已经尝试寻找一种特定的方式来清除这些纹理,我在这个游戏场景中加载了缓存。
有什么建议吗?
发布于 2014-08-05 19:54:06
你在用cocos2d v2吗?您可能有内存泄漏,因为未使用的纹理将在必要时被删除。试着分析你的应用程序,看看你是否有漏洞,它们在哪里。
您也可以在适当的时候调用这些方法,尽管我怀疑您必须:
[[CCTextureCache sharedTextureCache] removeUnusedTextures];
[[CCSpriteFrameCache sharedSpriteFrameCache] removeUnusedSpriteFrames];但同样,你所描述的听起来更像是内存泄漏。当应用程序收到内存警告时,缓存的数据将被清除。在此清除过程中,在纹理缓存中调用remove未使用纹理方法等。如果你有3/4级别的数据在你离开这些场景很久之后仍然隐藏着,那听起来就像是内存泄漏。
我假设这只发生在访问多个场景之后,问题不在于您的第四个场景只是试图加载设备所能处理的更多数据。
发布于 2014-08-05 21:45:46
您可以删除特定的纹理调用:
在cocos2D-x v3.x中:
Director::getInstance()->getTextureCache()->removeTextureForKey(ImageKeyName)在cocos2D-x v2.x中:
CCTextureCache::sharedTextureCache()->removeTextureForKey(ImageKeyName);其中ImageKeyName只是图像的路径(与加载纹理的方式相同)
https://stackoverflow.com/questions/25146743
复制相似问题