cocos2dx 3.x 使用dragonbones 4.5 -- (二)
2017-09-13 16:09
761 查看
这次主要来说说基本结构和内存机制。
当然还是要拿spine来做个比较。spine的运行库,内存管理是完全按照cocos引擎的RC机制来的,用起来和普通的node并无差别。函数原型大概是这样:
依次传入骨骼文件名、图集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做了缓存,避免对文件的反复读取,提高效率。
在我去看代码研究他的内存机制的时候,发现了很多不科学的地方,待续。。。
当然还是要拿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做了缓存,避免对文件的反复读取,提高效率。
在我去看代码研究他的内存机制的时候,发现了很多不科学的地方,待续。。。
相关文章推荐
- cocos2dx 3.x 使用dragonbones 4.5 -- (一)
- quick-cocos2dx 骨骼动画制作 使用dragonbones插件
- 【Unity&DragonBones】使用DragonBones的函数不能放Update函数的问题
- cocos2dx3.x加载使用cocostudio导出的UI项目
- cocos2dx之2.x和3.x使用draw绘图的区别
- DragonBones导出骨骼动画供cocos2d-x使用
- 在cocos2d-x中使用DragonBones实现骨骼动画
- Cocos2dx 学习随笔(一) Cocos2dx 3.x 读取plist文件 ValueVector 与 ValueMap的使用
- cocos2d-js V3.0 V3.1使用DragonBones
- 在cocos2d-x中使用DragonBones实现骨骼动画
- Cocos2dx加入Dragonbones支持
- cocos2dx 3.x TableView多行多列的使用
- cocos2dx3.x使用cocostudio触摸事件不响应的奇葩问题
- cocos2dx 3.x中ActionTimeLine无法使用setLastFrameCallFunc的解决方案
- Cocos2dx3.x 使用cocostudio导出的骨骼动画
- cocos2dx 3.x以上版本 lua中使用protobuf
- 白鹭EGRET使用龙骨DRAGONBONES骨骼动画
- tilemap在cocos2dx-3.x中的使用
- (2) Cocos2dx 3.x lambda表达式的使用
- cocos2dx3.x 使用libluacocos2d库 问题