目前spine 比 dragonbones 更强大。IK,FFD自由变形,网格Meshes,边界框 Bounding Boxes
多种输出格式。 这些都比 dragonbones强的多。 最重要的是,官方支持众多平台,
- cocos2d-iphone – Objective-C
- cocos2d-x – C++
- Corona – Lua
- Flash – ActionScript 3, demo
- libgdx – Java, HTML5 demo, game demo
- LÖVE – Lua
- MonoGame – C#
- SFML – C++
- Starling – ActionScript 3, demo
- Torque2D – C++ / TorqueScript
- Turbulenz – JavaScript, demo
- XNA – C#
- Unity – C#, demo, documentation
- Unity 2D Toolkit – C#
官方里,包括了对 cocos2d-x Unity HTML5 的支持的运行时库。
这个dragonbones官方没有。
但是,注意: Spine由于作者取向问题,导致Spine数据结构,对纸娃娃系统可以说严重不支持,
这个可以说是Spine的一个大坑,也是一个严重发展隐患。
就是说Spine目前的版本,不支持做换装类系统的游戏,(这里说的换装,不是换武器,是指换人物模型的 衣服、脸型、眼型、嘴型、手型、眉毛发行等等)。
Spine初学者可能说,你说的不对啊,Spine可以换装啊。上身衣服找到插槽换一个附件不就换装了吗。 如果你这样说,那说明你没用Spine做过带“纸娃娃系统”的游戏。
例如,有这样一个普通需求,我的游戏人物可以允许换眼的造型和嘴的造型。
注意人物的眼是有动画的,睁眼闭眼的序列帧动画, 嘴也是一样有的。
眼由3张图片构成动画。 如果换眼型,就要换成另外3张图片。
如果用Spine做,眨眼是在 Spine动画里做的,在Key帧时,设置此时间显示的是那张眼图片。
但是,如果用户点击按钮选择一种眼型时,
我用代码找到眼对应的Slot插槽,然后换另外一个附件后,
当我播放当前动画时,动画会自动把眼设置回默认的图片。
也就是说我做不了换眼。
用户换眼型:
skeleton.FindSlot("eyes").Attachment = attachment;
播放动画:
skeletonAnimation.state.SetAnimation(1, "idle", false);
放了动画,眼的图片又会被重置会原来的图片。换装失败。
有人说,用Skin。但Skin是整体换,不是组合换。 另外,SetSkin()内部就是换Slot插槽的附件,会上面是一样的。
造成Spine严重不支持纸娃娃换装的原因是他的数据结构设计问题,作者在论坛里也没有一个解决办法。
Spine的结构是 Skeleton(骨架)-->Bone(骨头)-->Slot(插槽)-->Attachment(附件)。
这个结构的最大问题是,你只能控制到附件 Attachment 一级,你不能换Image图片(或Sprite)。
因为Spine不提供你操作Image 。
你只能给Slot插槽换一个Attachment附件。 一个Slot当前状态只能有一个Attachment存在。
眨眼是动画,就是不停切换Attachment实现。
但是你编辑的一个Idle动画里是内部设定好了不停切换哪几个Attachment。
所以,你代码换了装,一播放动画就会被动画设置回原来的Attachment,又回去了。
Spine做换装游戏是一个大坑,不光是改改他的底层runtime代码就能用的,要改代码的解析结构。
打开它的导出json文件,你看看,他把 Attachment 设置到了 animations 里了。
而且,你在runtime API接口里找不到 遍历一个 Slot上所有Attachment的接口,Spine不提供。
原因是他放在了 animations里了, 当前播放是Idle还是其他动画,这是不确定的,所以他不提供你找插槽上的所以附件的接口。
----------------
希望 dragonbones 不要太参考 Spine的数据结构,他那结构做换装不好。
希望 dragonbones 以后结构是 Skeleton(骨架)-->Bone(骨头)-->Slot(插槽)-->Attachment(附件) -->Sprite(图片)。
提供给程序可以操作纹理图片的接口。这样实现纸娃娃系统就好多了。
现在找一款很好支持,动画换装的工具很难。 |