# DragonBones 5.0 数据格式标准说明
```javascript
{
    // DragonBones 数据名称
    "name": "dragonBonesName",

    // 数据版本
    "version": "5.0",
    
    // 最低兼容版本
    "compatibleVersion": "4.5",

    // 动画帧频
    "frameRate": 24,

    // 自定义数据 (可选属性 默认: null)
    "userData": null,

    // 骨架列表
    "armature": [{

        // 骨架名称 (一个 DragonBones 数据可包含多个骨架)
        "name": "armatureName",

        // 动画帧频 (可选属性 默认: 使用全局帧频)
        "frameRate": 24,

        // 动画类型 (可选属性 默认: "Armature")
        // ["Armature": 骨骼动画, "MovieClip": 基本动画, "Stage": 场景动画]
        "type": "Armature",

        // 自定义数据 (可选属性 默认: null)
        "userData": null,

        // 添加到舞台后的默认行为列表 (可选属性 默认: null)
        "defaultActions": [

            // 此骨架播放指定动画
            ["gotoAndPlay", "animationName"],

            // 此骨架播放指定动画并停止
            ["gotoAndStop", "animationName"],
        ],

        // 此骨架包含的骨骼列表
        "bone": [{

            // 骨骼名称
            "name": "boneName",

            // 父级骨骼的名称
            "parent": "parentBoneName",

            // 自定义数据 [任何类型] (可选属性 默认: null)
            "userData": null,

            // 骨骼注册到骨架的位移/ 斜切/ 缩放 (可选属性 默认: null)
            "transform": {
                "x": 0.00, // 水平位移 (可选属性 默认: 0.00)
                "y": 0.00, // 垂直位移 (可选属性 默认: 0.00)
                "skX": 0.0000, // 水平斜切 (可选属性 默认: 0.0000)
                "skY": 0.0000, // 垂直斜切 (可选属性 默认: 0.0000)
                "scX": 1.0000, // 垂直缩放 (可选属性 默认: 1.0000)
                "scY": 1.0000, // 垂直缩放 (可选属性 默认: 1.0000)
            }
        }],

        // 此骨架包含的插槽列表
        "slot": [{

            // 插槽名称
            "name": "slotName",

            // 插槽所属的骨骼名称
            "parent": "parentBoneName",

            // 默认显示对象的索引 (可选属性 默认: 0)
            "displayIndex": 0,

            // 混合模式 (可选属性 默认: null)
            "blendMode": null,

            // 自定义数据 [任何类型] (可选属性 默认: null)
            "userData": null,

            // 显示对象的颜色叠加 (可选属性 默认: null)
            "color": {
                "aM": 100, // 透明叠加 [0~100] (可选属性 默认: 100)
                "rM": 100, // 红色叠加 [0~100] (可选属性 默认: 100)
                "gM": 100, // 绿色叠加 [0~100] (可选属性 默认: 100)
                "bM": 100, // 蓝色叠加 [0~100] (可选属性 默认: 100)
                "aO": 0.00, // 透明偏移 [-255~255] (可选属性 默认: 0)
                "rO": 0.00, // 红色偏移 [-255~255] (可选属性 默认: 0)
                "gO": 0.00, // 绿色偏移 [-255~255] (可选属性 默认: 0)
                "bO": 0.00, // 蓝色偏移 [-255~255] (可选属性 默认: 0)
            },

            // 添加到舞台后的行为列表 (可选属性 默认: null)
            "actions": [

                // 子骨架播放指定动画 (仅对显示对象为骨架时有效)
                ["gotoAndPlay", "animationName"],

                // 子骨架播放指定动画并停止 (仅对显示对象为骨架时有效)
                ["gotoAndStop", "animationName"],
            ]
        }],

        // 此骨架包含的皮肤列表
        "skin": [{

            // 皮肤名称
            "name": "skinName",

            // 此皮肤包含的插槽列表
            "slot": [{

                // 插槽名称
                "name": "slotName",

                // 此插槽包含的显示对象列表
                "display": [{

                    // 显示对象名称
                    "name": "displayName",

                    // 显示对象类型 (可选属性 默认: "image")
                    // ["image": 贴图, "armature": 骨架, "mesh": 网格, "boundingBox": 边界框, ... 其他扩展的类型]
                    "type": "image",

                    // 子骨架指向的骨架名、网格包含的贴图名 (可选属性 默认: null, 仅对子骨架、网格有效)
                    "path": "path",

                    // 共享网格的索引 (可选属性 默认: null, 仅对网格有效)
                    "share": "meshName",

                    // 是否继承动画 (可选属性 默认: true, 仅对共享网格有效)
                    "inheritFFD": true,

                    // 边界框类型 (可选属性 默认: "rectangle", 仅对边界框有效)
                    // ["rectangle": 矩形, "ellipse": 椭圆, "polygon": 自定义多边形]
                    "subType": "rectangle", 

                    // 显示对象颜色 (可选属性 默认: 0, 仅对边界框有效)
                    "color": 0,

                    // 显示对象相对于骨骼的位移/ 斜切/ 缩放 (可选属性 默认: null)
                    "transform": {
                        "x": 0.00, // 水平位移 (可选属性 默认: 0.00)
                        "y": 0.00, // y 垂直位移 (可选属性 默认: 0.00)
                        "skX": 0.0000, // 水平斜切 (可选属性 默认: 0.0000)
                        "skY": 0.0000, // 垂直斜切 (可选属性 默认: 0.0000)
                        "scX": 1.0000, // 垂直缩放 (可选属性 默认: 1.0000)
                        "scY": 1.0000, // 垂直缩放 (可选属性 默认: 1.0000)
                    },

                    // 显示对象的轴点 (可选属性 默认: null, 对骨架无效)
                    "pivot": {
                        "x": 0.50, // 水平轴点 [0.00~1.00] (可选属性 默认: 0.50)
                        "y": 0.50, // 垂直轴点 [0.00~1.00] (可选属性 默认: 0.50)
                    },

                    // 矩形或椭圆的宽高 (可选属性 默认: 0, 仅对边界框有效)，
                    "width": 100, "height": 100,

                    // 顶点相对显示对象轴点的坐标列表 (可选属性 默认: null, 仅对网格或自定义多边形边界框有效)
                    // [x0, y0, x1, y1, ...]
                    "vertices": [-64.00, -64.00, 64.00, -64.00, 64.00, 64.00, -64.00, 64.00],

                    // 顶点的 UV 坐标列表 (可选属性 默认: null, 仅对网格有效)
                    // [u0, v0, u1, v1, ...]
                    "uvs": [0.0000, 0.0000, 1.0000, 0.0000, 1.0000, 1.0000, 0.0000, 1.0000],

                    // 三角形顶点索引列表 (可选属性 默认: null, 仅对网格有效)
                    "triangles": [0, 1, 2, 2, 3, 0],

                    // 顶点权重列表 (可选属性 默认: null, 仅对网格有效)
                    // [骨骼数量, 骨骼索引, 权重, ..., ...]
                    "weights": [1, 0, 1.00, 2, 0, 0.50, 1, 0.50],

                    // 蒙皮插槽注册的矩阵变换 (可选属性 默认: null, 仅对网格有效)
                    // [a, b, c, d, tx, ty]
                    "slotPose": [1.0000, 0.0000, 0.0000, 1.0000, 0.00, 0.00],

                    // 蒙皮骨骼注册的矩阵变换 (可选属性 默认: null, 仅对网格有效)
                    // [骨骼索引, a, b, c, d, tx, ty, ...]
                    "bonePose": [0, 1.0000, 0.0000, 0.0000, 1.0000, 0.00, 0.00]
                }]
            }]
        }],

        // 此骨架包含的 ik 约束列表
        "ik": [{

            // ik 约束名称
            "name": "ikName",

            // 绑定骨骼的名称
            "bone": "boneName",

            // 目标骨骼的名称
            "target": "ikBoneName",

            // 弯曲方向 (可选属性 默认: true)
            // [true: 正方向/ 顺时针, false: 反方向/ 逆时针]
            "bendPositive": true,

            // 骨骼链的长度 (可选属性 默认: 0)
            // [0: 只约束 bone, n: 约束 bone 及 bone 向上 n 级的父骨骼]
            "chain": 0,

            // 权重 [0.00: 不约束 ~ 1.00: 完全约束] (可选属性 默认: 1.00)
            "weight": 1.00
        }],

        // 此骨架包含的动画列表
        "animation": [{

            // 动画名称
            "name": "animationName",

            // 循环播放次数 [0: 循环播放无限次, n: 循环播放 n 次] (可选属性 默认: 1)
            "playTimes": 1,

            // 动画帧长度 (可选属性 默认: 1)
            "duration": 1,

            // 此动画包含的关键帧列表 (可选属性 默认: null)
            "frame": [{

                // 帧长度 (可选属性 默认: 1)
                "duration": 1,

                // 帧声音 (可选属性 默认: null)
                "sound": "soundName",

                // 帧事件列表 (可选属性 默认: null)
                "events": [{

                    // 事件名称
                    "name": "eventName",

                    // 骨骼名称 (可选属性 默认: null)
                    "bone": "boneName",

                    // 插槽名称 (可选属性 默认: null)
                    "slot": "slotName",

                    // 事件参数列表 (可选属性 默认: null)
                    "ints":[0， 1， 2],
                    "floats":[0.01， 1.01， 2.01],
                    "strings":["a", "b", "c"]
                }],

                // 帧行为列表 (可选属性 默认: null)
                "actions": [

                    // 此骨架播放指定动画
                    ["gotoAndPlay", "animationName"],

                    // 此骨架播放指定动画并停止
                    ["gotoAndStop", "animationName"],
                ]
            }],

            // 深度排序时间轴
            "zOrder": {
                "frame": [{
                    
                    // 帧长度 (可选属性 默认: 1)
                    "duration": 1,

                    // 插槽偏移 [slotIndexA, offsetA, slotIndexB, offsetB, ...] (可选属性 默认: null)
                    "zOrder": [0, 2, 4, 1, 6, -1]
                }]
            },

            // 此动画包含的骨骼时间轴列表 (可选属性 默认: null)
            "bone": [{

                // 时间轴名称 (与骨骼名称对应)
                "name": "boneName",

                // 时间轴缩放 (可选属性 默认: 1.00)
                "scale": 1.00,

                // 时间轴偏移 (可选属性 默认: 0.00)
                "offset": 0.00,

                // 此时间轴包含的关键帧列表 (可选属性 默认: null)
                "frame": [{

                    // 帧长度 (可选属性 默认: 1)
                    "duration": 1,

                    // 缓动类型 [0: 由 tweenEasing 或 curve 描述缓动类型，1~N: 其他扩展缓动类型枚举（具体如何枚举未来再定义）] (可选属性 默认: 0)
                    "tweenType": 0,

                    // 缓动值 [0.00: 线性, null: 无缓动] (可选属性 默认: null)
                    "tweenEasing": 0.00,

                    // 贝塞尔曲线缓动参数列表 [x1, y1, x2, y2, ...] (可选属性 默认: null)
                    "curve": [0.00, 0.00, 1.00, 1.00],

                    // 骨骼的位移/ 斜切/ 缩放 (可选属性 默认: null)
                    "transform": {
                        "x": 0.00, // 水平位移 (可选属性 默认: 0.00)
                        "y": 0.00, // 垂直位移 (可选属性 默认: 0.00)
                        "skX": 0.0000, // 水平斜切 (可选属性 默认: 0.0000)
                        "skY": 0.0000, // 垂直斜切 (可选属性 默认: 0.0000)
                        "scX": 1.0000, // 垂直缩放 (可选属性 默认: 1.0000)
                        "scY": 1.0000 // 垂直缩放 (可选属性 默认: 1.0000)
                    },
                }]
            }],

            // 此动画包含的插槽时间轴列表
            "slot": [{

                // 时间轴名称 (与插槽名称对应)
                "name": "slotName",

                // 此时间轴包含的关键帧列表 (可选属性 默认: null)
                "frame": [{

                    // 帧长度 (可选属性 默认: 1)
                    "duration": 1,

                    // 缓动类型 [0: 由 tweenEasing 描述缓动类型，N: 其他扩展缓动属性] (可选属性 默认: 0)
                    "tweenType": 0,

                    // 补间缓动 [0.00: 线性, null: 无缓动] (可选属性 默认: null)
                    "tweenEasing": 0.00,

                    // 补间缓动贝塞尔曲线 [x1, y1, x2, y2, ...] (可选属性 默认: null)
                    "curve": [0.00, 0.00, 1.00, 1.00],

                    // 此帧的显示对象索引 (皮肤中对应的插槽显示对象列表) (可选属性 默认: 0)
                    "displayIndex": 0,

                    // 显示对象的颜色叠加 (可选属性 默认: null)
                    "color": {
                        "aM": 100, // 透明叠加 [0~100] (可选属性 默认: 100)
                        "rM": 100, // 红色叠加 [0~100] (可选属性 默认: 100)
                        "gM": 100, // 绿色叠加 [0~100] (可选属性 默认: 100)
                        "bM": 100, // 蓝色叠加 [0~100] (可选属性 默认: 100)
                        "aO": 0.00, // 透明偏移 [-255~255] (可选属性 默认: 0)
                        "rO": 0.00, // 红色偏移 [-255~255] (可选属性 默认: 0)
                        "gO": 0.00, // 绿色偏移 [-255~255] (可选属性 默认: 0)
                        "bO": 0.00, // 蓝色偏移 [-255~255] (可选属性 默认: 0)
                    },

                    // 播放到当前帧时，执行的动作行为列表 (可选属性 默认: null)
                    "actions": [

                        // 子骨架播放指定动画 (仅对显示对象为骨架时有效)
                        ["gotoAndPlay", "animationName"],

                        // 子骨架播放指定动画并停止 (仅对显示对象为骨架时有效)
                        ["gotoAndStop", "animationName"],
                    ]
                }],
            }],

            // 此动画包含的自由变形时间轴列表 (可选属性 默认: null)
            "ffd": [{

                // 时间轴名称 (与网格名称对应)
                "name": "timelineName",
                
                // 皮肤名称
                "skin": "skinName",

                // 插槽名称
                "slot": "slotName",

                // 此时间轴包含的关键帧列表 (可选属性 默认: null)
                "frame": [{

                    // 帧长度 (可选属性 默认: 1)
                    "duration": 1,

                    // 缓动类型 [0: 由 tweenEasing 描述缓动类型，N: 其他扩展缓动属性] (可选属性 默认: 0)
                    "tweenType": 0,

                    // 补间缓动 [0.00: 线性, null: 无缓动] (可选属性 默认: null)
                    "tweenEasing": 0.00,

                    // 补间缓动贝塞尔曲线 [x1, y1, x2, y2, ...] (可选属性 默认: null)
                    "curve": [0.00, 0.00, 1.00, 1.00],

                    // 顶点坐标列表索引偏移 (可选属性 默认: 0)
                    "offset": 0,

                    // 顶点坐标相对位移列表 [x0, y0, x1, y1, ...] (可选属性 默认: null)
                    "vertices": [0.01, 0.01]
                }]
            }]
        }]
    }]
}
```

------------------------------
# 5.0 相对 [4.5](DragonBones_4.5_data_format_zh.md) 格式变化

## Root
* 增加 "compatibleVersion" 属性，代表兼容的最低版本。
* 删除 "isGlobal" 属性。
	* 不再支持绝对坐标，只支持相对坐标，相当于isGlobal设置为0。
	* isGlobal为1的情况（绝对坐标）只存在于使用2.3及以前的数据格式。
	* 从3.0开始支持相对坐标，于是引入isGlobal属性用于向下兼容，同时支持相对坐标和绝对坐标。
	* 从5.0开始不再支持绝对坐标。

## Display
* 增加 "path" 属性，与 name 区分，用于标识图片指向的贴图路径、Mesh包含的贴图路径或子骨架指向的骨架名。
* name属性的意义变为display的唯一标示符，不再代表路径。

## 支持边界框
* "display"的"type" 属性的值增加 "boundingBox" ，用于标记边界框。  
* 边界框类型的 display 会包含如下属性
	* "subType" : 标记边界框的类型，可能的值为"rectangle": 矩形, "ellipse": 椭圆, "polygon": 自定义多边形
	* "width", "height": 宽高（仅对矩形或椭圆类型的边界框生效）
	* "vertices": 顶点列表（仅对自定义多边形类型的边界框生效）

## 支持共享网格（Linked Mesh）
* 网格类型的Display增加 "share" 属性，可以通过设置share属性将之变为共享网格。
* 共享网格可以通过 "inheritFFD" 属性控制共享网格是否继承主网格的FFD动画。

## 支持动画中改变插槽的显示顺序（ZOrder）
* "animation" 中增加 "zOrder" 属性，代表深度排序时间轴
* "zOrder" 包含frames属性，代表时间轴上的关键帧列表。包含的每个关键帧对象会包含如下属性：
	* "duration": 关键帧持续的长度。
	* "zOrder": 该关键帧上zOrder需要变化的插槽以及变化的幅度组成的数组。

## 事件统一由主时间轴抛出，支持多事件和事件参数列表
* 去掉骨骼时间轴包含的关键帧的event属性。（版本升级的时候会把数据移动到主时间轴相同位置的关键帧上）
* "animation" 的 "frame"（主时间轴包含的关键帧列表）包含的关键帧数据的 event 属性改为 "events", 表示需要在该帧上抛出的事件列表。
* 事件对象包含如下属性
	* "name": 事件名
	* "bone": 抛出事件的骨骼，默认为null（原骨骼时间轴包含的事件，将把骨骼名记录在这里）
	* "slot": 抛出事件的插槽，默认为null（该属性和上面的bone属性不可能同时存在，都不存在代表事件由骨架抛出）
	* "ints": 整形参数列表
	* "floats": 浮点形参数列表
	* "strings": 字符串形参数列表

## 增加更多缓动类型的定义
* "frame"包含的关键帧数据增加 "tweenType" 属性。
* "tweenType" 默认为0 代表由 tweenEasing 或 curve 描述缓动类型（和4.5一致）
* "tweenType" 不为0 代表使用其他扩展缓动类型的枚举，具体每个枚举代表的意义未来再定义。
