cocos2d-x 3.2中Replacescene时内存不释放

Posted

技术标签:

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

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

【问题讨论】:

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

你可以使用

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

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

【讨论】:

【参考方案2】:

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

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

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

【讨论】:

以上是关于cocos2d-x 3.2中Replacescene时内存不释放的主要内容,如果未能解决你的问题,请参考以下文章

cocos2d-x-3.2 怎样创建新project

cocos2d-x 3.2 之 2048 —— 第五篇

cocos2d-x3.2 下使用多线程

Cocos2d-x 3.2 之 别踩白块(第三篇)

cocos2d-x 3.2 lua 怎样加载plist文件

Cocos2d-x 3.2 大富翁游戏项目开发-第七部分 获取角色路径_3