Spine可以导出为JSON或者二进制格式。JSON可读性强、便于检查和修改但体积大;二进制可读性差,修改成本高,但文件体积小,加载速度快。
可以说Spine导出的JSON格式数据是骨骼数据实例的序列化版本。它由一系列的骨骼(bones)、插槽(slots)、皮肤(skins)和动画(animations)组成。
骨架(Skeleton)
skeleton
节点存储骨架的元数据,结构如下:
"skeleton": { "hash": "5WtEfO08B0TzTg2mDqj4IHYpUZ4", "spine": "3.8.24", "x": -17.2, "y": -13.3, "width": 470.86, "height": 731.44, "images": "./images/", "audio": "./audio/" },
Skeleton属性
- hash:skeleton数据的哈希值,工具可以用此哈希值来检测自上次加载以来数据是否发生变更。
- version:导出数据时使用的Spine工具的版本。
- x:AABB左下角的x坐标,跟spine软件中一样。
- y:AABB左下角的y坐标,跟spine软件中一样。
- width:skeleton附件在Spine中建立时的AABB宽度。虽然骨架的AABB取决于它的摆放方式,但我们依然可以用width、height来表示骨架的常规大小。
- height:骨架建立时的AABB高度。
- fps:帧率。
- images:图片路径。
- audio:音频路径。
AABB:计算机图形学中的术语,指“包围盒”、“包围体”。它的相交校验结果可以用来做碰撞检测。详见更权威的解释:https://zh.wikipedia.org/wiki/%E5%8C%85%E5%9B%B4%E4%BD%93
骨头(Bones)
bones
节点描述建立姿势的“骨头”。
例:
"bones": [ { "name": "root" }, { "name": "torso", "parent": "root", "length": 85.82, "x": -6.42, "y": 1.97, "rotation": 94.95 }, ... ],
“骨头”是有序的,因此“parent”总是在“child”前面。
Bones属性
- name:骨骼名称。在skeleton中唯一。
- length:骨骼长度。除了在绘制调试线条时使用外,通常不在运行时使用。缺值省为0。
- transform:继承父bone的变换方式:
normal
,onlyTranslation
,noRotationOrReflection
,noScale
,noScaleOrReflection
。默认值为normal
。 - skin:为
true
时,该骨骼只有在拥有这个骨骼的皮肤激活的时候才激活。默认为false
。(通常在游戏发开中,一个组件active(激活)是才会渲染,也就是说才会显示)。 - x:该骨头相对于父节点的x坐标。默认为0。
- y:该骨头相对于父节点的y坐标。默认为0。
- rotation:该骨头相对于父节点的旋转角度。默认为0。
- scaleX:该骨头的x方向缩放值。默认为1。
- scaleY:该骨头的y方向缩放值。默认为1。
- shearX:该骨头x方向裁剪值。默认0。
- shearY:该骨头y方向裁剪值。默认0。
- color:颜色,默认
0x989898FF
(RGBA)。(非必需)
插槽(Slots)
插槽描述绘制顺序以及使用哪个附件。
例:
"slots": [ { "name": "left shoulder", "bone": "left shoulder", "attachment": "left-shoulder" }, { "name": "left arm", "bone": "left arm", "attachment": "left-arm" }, ... ],
没有插槽时,“slot”将被省略。插槽绘制顺序排序,索引大的图片绘制在在所有小的图片之上。(这跟游戏里的zIndex类似)
Slots属性
- name:插槽名称,在骨架中唯一。
- bone:插槽连接的骨骼名称。
- color:插槽颜色(RGBA)。
- dark:摆姿势时插槽的深色值(RGB),用于tint。若未使用tint,则忽略。
- attachment:附件名称。
- blend:混合模式。
约束(Constraints)
IK约束
该节点描述IK (Inverse Kinematics反向动力学)约束。
"ik": [ { "name": "left leg", "order": 2, "bones": [ "left thigh", "left shin" ], "target": "left ankle", "mix": 0.5, "bendPositive": false, "compress": true, }, ... ],
如果不存在IK约束,“ik”将被忽略。
IK约束属性
- name:约束名称,骨架中唯一
- order:约束被应用的顺序
- skin:
- bones
- target
- mix
- softness
- bendPositive
- compress
- stretch
- uniform