内存管理对象分为两种,一是普通对象,另一种是cache对象。
一、普通对象清理的实现是,每次场景切换清理,从当前SCENE的根节点遍历删除整棵树的节点。
cocos2d-x的图像绘制是根据编写代码时,scene,layer,sprite之间的层次结构生成的。由于scene下面有子节点layer,layer下面有子节点sprite,(子节点都需要手动添加,而且这不是类继承,而只是一个层次组织结构)。
二、Cache对象,由于在新增的时候不从属于scene的那棵场景树,清理的话只执行于程序退出阶段。
当director使用mainloop时,调用的是遍历这GAME VIEW的棵树每个节点的绘图函数。而画图的顺序是按照,增添子节点时的zOrder位置,从小到大,可为负值。这样子解决了,2d图的前景精灵背景的遮盖问题。如,
// purge bitmap cache
CCLabelBMFont::purgeCachedData();
// purge all managers
CCAnimationCache::purgeSharedAnimationCache();
CCSpriteFrameCache::purgeSharedSpriteFrameCache();
CCActionManager::sharedManager()->purgeSharedManager();
CCScheduler::purgeSharedScheduler();
CCTextureCache::purgeSharedTextureCache();
coocs2d-x 把整理对象区别对待,都能防止内存的浪费。不过假若,很多文件都存储为CACHE对象时,没有释放,最终可能导致内存过度消耗,系统速度减缓,这是要注意的一点。