【spine】原理介绍和程序实现

  忽然间,微博上被@了,一看原来是以前的关于介绍 spine 的文章引发的。而后就是一阵惭愧,又开了一坑,而后就木有了。虽然,一直在研究 spine,可是的确没写下来相关的内容。因而,赶忙,补了一些内容。
node


  官网内容转发,没啥技术含量。我本身写的运行库也完成了,虽然还须要打磨,可是比官方的更符合2dx 的风格。作了许久以后,对 spine 的理解更深了一点,而后就胡乱介绍下设计思路和为何这么作。
编辑器


概念
ide


先来介绍下 spine 中的一些术语和概念优化


  • Bone 骨骼动画

spine 是骨骼编辑器,因此骨骼是基础。每一个骨骼都会有旋转,缩放,位移的属性。而后骨骼能够有子节点,最终造成了一个树型结构。能够对应2dx 里面的 nodespa


  • Slot 插槽设计

骨骼上的一个挂载点。不是全部的骨骼上都能放置东西的,由于不少骨骼其实只参与计算,真正重要的骨骼,也就是须要挂载其余东西的骨骼上必须放置插槽。slot 只是用来标记特殊的骨骼位置,自己只有一个颜色属性,也能够说,重要的骨骼节点能够称为 slot。排序


  • Attachment 附件图片

挂在插槽上的内容,能够是图片,也能够是断定区域,只要是你能想到的东西,均可以当成附件。it


  • Draw order 描画顺序

骨架上插槽的一个顺序列表。用来控制描画的前后顺序。


  • Animation 动画

基于时间轴的一个骨骼状态列表。


  • Skin 皮肤

一套附件的集合,相似于换装。


  • Bounding Box 边界框

用来指定骨骼上的边界的多边形的区域。


  • atlas 图集

贴图集合,小图片合并在一块儿,就成了图集。




实现


上面大体介绍了一些基本概念,而后咱们从实现角度上来讲下为啥这么设计。


首先,假设咱们须要一个骨骼系统。很酷,是的,最近的确比较火。因而,咱们就设计了一个树状的骨架,每一个节点就是(Bone)。


很简单啊,再想下,骨骼上要放图片啥的,因而咱们就要能访问到特定的骨骼,遍历太傻了,好吧,咱们给这些骨骼加个名字,这样就能访问到具体 骨骼了,那这些名字就叫 slot。


好吧,可能有些人以为,slot 和 bone 本质上同样,为啥须要分开呢,不必的。我只能说事情其实并不简单,来想下,咱们已经有了一个完美的骨架,图片也在应该在的骨骼上了。那咱们该如何显示图片么?遍历么,从根结点开始,一直到最下层的节点,无论你用啥排序,这个顺序是固定的,可是现实老是很残酷,不少时候,咱们须要不停调整图片描画的顺序,也就是调整树的节点排序,啊,好麻烦。那怎么办,咱们指定下骨骼描画的顺序吧(Draw order),这些特定的骨骼也就是 slot。


你看,这下完美了,也就是 bone 用来计算位置,slot 用来控制描画。


完美的骨骼系统,必定要有碰撞区域(bounding box),这和图片差很少,一个用于显示,一个用于边界判断,好吧,那就抽象成一个概念叫(p_w_upload),因而,slot 上就能够附加不一样的 p_w_upload 了。


终于能够换附件了,可是一个一个换好累。因而,咱们把一组附件合在一块儿,组成了 skin。这下简单了,一换 skin,整个世界就变样了。


啊,作着作着,就发现图片太多了,要优化啊。怎么办,简单,把小图片合在一块儿,每一个图片对应了一个大图里面的一个区域,这就是 atlas。


啊,不早了,先说到这里吧,下次有空继续。

相关文章
相关标签/搜索