这次主要来说说基本结构和内存机制。
当然还是要拿spine来做个比较。spine的运行库,内存管理是完全按照cocos引擎的RC机制来的,用起来和普通的node并无差别。函数原型大概是这样:
SpineNode* create(boneFile,atlasFile,pngFile)
依次传入骨骼文件名、图集json名、图片名,然后就会返回给你一个node,直接就开用了。这样做有几个 缺点:
1、每次都会去读取一次骨骼文件。如果对一个骨骼频繁读取,这个地方可以考虑自己做一个缓存。
但是他也有优点:
1、atlas那一部分,用的是cocos引擎本身的atlas图集那一部分,好理解好使用好管理。boneFile不管做不做缓存,去读取多少次,这个atlas只有一次,且加入了缓存。
2、返回的node本身,也是和cocos引擎的内存管理机制吻合,好理解好使用好管理。
dragonbones就不一样了,他引入了一套自己的内存机制去管理boneFile读进来的boneData和atlasFile,增加了理解成本(以致于我粗略看了一遍都还不能具体详细的理解)。用法上也就不一样了,大概使用步骤:
1、读入boneFile。
2、读入atlasFile。
3、构造显示节点。(buildArmatureDisplay)
这样的话,缺点显而易见:
1、步骤繁琐。这一点,见仁见智,因为spine的缺点也说了,没有对boneFile的管理和缓存,但是我还是觉得他这个很烦。我自己加了缓存的spine库,操作也可以保持和spine一致。
2、增加理解成本。这个才是最重要的,文档也没有,还要自己去hack代码。
优点也有:
1、对boneData做了缓存,避免对文件的反复读取,提高效率。
在我去看代码研究他的内存机制的时候,发现了很多不科学的地方,待续。。。
原文链接:https://www.f2er.com/cocos2dx/338420.html