【问题标题】:Memory not releasing when Replacescene in cocos2d-x 3.2cocos2d-x 3.2中Replacescene时内存不释放
【发布时间】:2015-10-06 23:30:04
【问题描述】:

我正在 cocos2d-x 3.2 中开发游戏,我的应用程序内存随着游戏进度而增加,并且在 cocos2d-x 3.2 中替换场景时似乎资源内存没有释放,请帮助

【问题讨论】:

  • 你能分享一些代码吗
  • 代码可以帮助您更轻松,但请查看之前的question。
  • 我解决了我的大部分问题,方法是自动释放使用 new 运算符初始化的每个对象,加上在每个场景转换时,我通过将它们推入数组来删除该场景的每个对象..那样它起作用了..我认为它不是释放内存的正确方法,但它起作用了。

标签: memory-management cocos2d-x-3.0


【解决方案1】:

你可以使用

Director::getInstance()->purgeCachedData();

释放TextureCache、SpriteFrameCache等中未使用的资源

【讨论】:

    【解决方案2】:

    如果没有看到一些代码,这将很难正确回答,但我会冒险猜测一两个。希望这会有所帮助。

    一个常见的错误是没有使用所有Node 相关类默认具有的::create() 函数。使用::create() 确保使用Ref,这意味着对象将被引用计数,并且在替换场景后几乎会自动释放内存。因此,如果您在代码中的某处使用new Scene()(并且您没有在析构函数中释放它)而不是Scene::create(),那么您将在那里发生内存泄漏。

    Sprite、Node、Action 基本上都是如此。始终使用它们相关的::create() 静态函数。如果您继承了这些类中的任何一个,则可以通过将 CREATE_FUNC(Player) 放在类定义中的标题中轻松创建自己的 create() 方法。在这种情况下,Player 是您创建的扩展现有类的类的名称,例如 Node 或 Sprite。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多