【问题标题】:Memory management in game游戏中的内存管理
【发布时间】:2012-01-05 12:15:44
【问题描述】:

我的游戏在我的手机中消耗大量内存,我该如何解决这个问题?

我尝试将我的 objects = null 留在 final 并调用垃圾收集器,但没有解决。

游戏必须每分钟创建一个新的精灵。

【问题讨论】:

    标签: android memory garbage-collection


    【解决方案1】:

    在 Sprite 中消耗大量内存的是它的纹理而不是对象本身,正如我在 android 的 cocos2d 源代码中看到的那样,它们被 TextureManager 通过匹配文件名缓存(因为 IO 很慢)。因此,如果您不再需要它们(或者重新加载不会造成伤害),请记住使用 TextureManager.removeTexture() 释放纹理(主要是大的)。

    您还应该考虑为这些精灵实现object pool。这样您就可以简单地重复使用未使用的实例,而不是为了在下一刻创建一个新实例而丢弃它们。

    如果您不知道,Android SDK 附带了一个名为 allocation tracker 的工具(现在它也集成在 ADT 中)来分析内存使用情况。问题可能出乎你的意料。

    【讨论】:

      【解决方案2】:

      您已经编写了游戏,每分钟都在创建精灵,但我认为创建新的精灵替换精灵图像。如果您没有使用以下代码对该精灵进行任何功能位置操作。

      spritetest.setTexture(CCTextureCache.sharedTextureCache().addImage("newimage.png"));
      

      【讨论】:

        【解决方案3】:

        你必须清理之前创建的 cocos2d 的 sprite 或对象。

        removeChild(sprite1, true);
        

         sprite1.cleanup()
        

        之后,您可以将 null 分配给该对象。

        你可以调用方法

        CCDirector.sharedDirector().purgeCachedData();
        

        to 移除所有 cocos2d 的缓存数据。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-05-29
          • 2011-05-31
          相关资源
          最近更新 更多