我的游戏在手机中消耗了很多内存,我该如何解决这个问题?
我已经尝试将objects = null
留在最后并调用垃圾收集器,但未解决。
游戏必须每分钟创建一个新的精灵。
答案 0 :(得分:2)
在Sprite中消耗大量内存的是它的纹理而不是对象本身,正如我在cocos2d源中看到的那样,它们通过匹配文件名被TextureManager缓存(因为IO很慢)。因此,请记住使用 TextureManager.removeTexture()释放纹理(主要是大纹理),如果您不需要它们更长时间(或重新加载不会受到伤害)。
您还应考虑为这些精灵实施object pool。通过这种方式,您只需重复使用未使用的实例,而不是将它们丢弃,只是为了在下一刻创建一个新实例。
如果您不知道,Android SDK附带了一个名为allocation tracker的工具(现在也集成在ADT中)来分析内存使用情况。问题可能不是您所期望的。
答案 1 :(得分:1)
你已经编写了你的游戏每分钟创建精灵,但我想创建新的精灵替换精灵图像。如果你没有使用下面的代码对该精灵进行任何功能位置操作。
spritetest.setTexture(CCTextureCache.sharedTextureCache().addImage("newimage.png"));
答案 2 :(得分:1)
你必须清理以前创建的精灵或cocos2d的对象。
removeChild(sprite1, true);
或
sprite1.cleanup()
之后,您可以为该对象指定null。
您可以调用方法
CCDirector.sharedDirector().purgeCachedData();
删除缓存的所有cocos2d缓存数据。