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()
,那么您将在那里发生内存泄漏。
Sprite
、Node
、Action
基本上都是如此。始终使用它们相关的::create()
静态函数。如果您继承了这些类中的任何一个,则可以通过将 CREATE_FUNC(Player)
放在类定义中的标题中轻松创建自己的 create()
方法。在这种情况下,Player
是您创建的扩展现有类的类的名称,例如 Node
或 Sprite
。
【讨论】:
以上是关于cocos2d-x 3.2中Replacescene时内存不释放的主要内容,如果未能解决你的问题,请参考以下文章