Ver código fonte

spine extension update (#244)

COCO 3 anos atrás
pai
commit
177b88a813

+ 6 - 1
docs/zh/manuals/components.md

@@ -23,10 +23,15 @@ Defold 提供以下组件类型:
 * [Particle FX](/manuals/particlefx) -  创建粒子
 * [Script](/manuals/script) - 添加游戏逻辑
 * [Sound](/manuals/sound) - 播放音效音乐
-* [Spine model](/manuals/spinemodel) - 渲染spine动画
 * [Sprite](/manuals/sprite) - 显示2D图像 (可以带逐帧动画)
 * [Tilemap](/manuals/tilemap) - 显示一组瓷砖图
 
+其他组件可以通过载入扩展插件的方式导入项目:
+
+* [Rive model](/extension-rive) - 渲染 Rive 动画
+* [Spine model](/extension-spine) - 渲染 Spine 动画
+
+
 ## 开启关闭组件
 
 游戏对象在创建时其组件是开启的. 如果需要关闭组件可以给组件发送 [`disable`](/ref/go/#disable) 消息:

+ 2 - 2
docs/zh/manuals/glossary.md

@@ -13,7 +13,7 @@ brief: 本教程列举了使用 Defold 工作中会遇到的各种专用词汇
 
 ## Atlas
 
-![Atlas](images/icons/atlas.png){.left} 图集是为了增加性能减少显存消耗而把许多单张图片合并而成的一张大图. 其中可以包括静态图和逐帧动画序列图. 图集可被 GUI, Sprite, Spine model 和 ParticleFX 组件所共享. 详情请见 [图集教程](/manuals/atlas).
+![Atlas](images/icons/atlas.png){.left} 图集是为了增加性能减少显存消耗而把许多单张图片合并而成的一张大图. 其中可以包括静态图和逐帧动画序列图. 图集可以被多种组件所共享. 详情请见 [图集教程](/manuals/atlas).
 
 ## Builtins
 
@@ -169,4 +169,4 @@ msg.post("#weapon", "disable")
 
 ## Vertex shader
 
-![Vertex shader](images/icons/vertex-shader.png){.left} 顶点着色器用于计算多边形在屏幕上投射的位置. 对于各种可视组件, 比如 sprite, spine 模型 或者 3D 模型, 它们的形状由多边形顶点构成. 顶点着色程序负责处理顶点 (在全局游戏空间) 的位置并且负责计算出每个多边形顶点的在屏幕上的映射位置. 详情请见 [Shader manual](/manuals/shader).
+![Vertex shader](images/icons/vertex-shader.png){.left} 顶点着色器用于计算多边形在屏幕上投射的位置. 对于各种可视组件, 比如 sprite, 瓷砖地图 或者 3D 模型, 它们的形状由多边形顶点构成. 顶点着色程序负责处理顶点 (在全局游戏空间) 的位置并且负责计算出每个多边形顶点的在屏幕上的映射位置. 详情请见 [Shader manual](/manuals/shader).

+ 1 - 63
docs/zh/manuals/gui-spine.md

@@ -3,66 +3,4 @@ title: Defold GUI Spine 节点
 brief: 本教程介绍了 Defold GUI 场景中骨骼动画 Spine 节点的使用.
 ---
 
-# GUI Spine 节点
-
-Spine 动画模型可以作为 GUI 节点也可以作为游戏对象加入场景. 本教程介绍了导入的 Spine 动画数据在 GUI 场景下的使用.
-
-## 创建 spine 节点
-
-首先你应该导入动画数据并建立 Spine Scene 资源. [Spine 动画](/manuals/spine) 文档介绍了其方法.
-
-接着, Spine Scene 资源的内容要加入到 GUI 场景中去. 加入方法 <kbd>右键点击</kbd>  *Outline* 中的 *Spine Scenes* 部分, 选择 <kbd>Add ▸ Spine Scenes...</kbd>. 选择要加入的 Spine Scenes (可加多个).
-
-![添加 Spine Scene](images/gui-spine/add.png){srcset="images/gui-spine/[email protected] 2x"}
-
-最后, <kbd>右键点击</kbd> *Outline* 中的 *Nodes* 部分, 选择 <kbd>Add ▸ Spine</kbd> 来创建 Spine 节点.
-
-![New spine node](images/gui-spine/new_node.png){srcset="images/gui-spine/[email protected] 2x"}
-
-新节点自动被选中. 注意设置其属性:
-
-Spine Scene
-: 此节点使用的 Spine Scene 数据源.
-
-Spine Default Animation
-: 场景初始化时节点默认的动画.
-
-Skin
-: 场景初始化时节点用于动画的皮肤.
-
-## 运行时动画控制
-
-使用脚本可以在运行时控制Spine节点. 要在一个节点上开始播放动画, 只要调用 [`gui.play_spine_anim()`](/ref/gui/#gui.play_spine_anim:node-animation_id-playback-[play_properties]-[complete_function]) 函数:
-
-```lua
-local catnode = gui.get_node("cat_note")
-local play_properties = { blend_time = 0.3, offset = 0, playback_rate = 1 }
-gui.play_spine_anim(catnode, hash("run"), gui.PLAYBACK_ONCE_FORWARD, play_properties, function(self, node)
-    print("Animation done!")
-end)
-```
-
-## 骨骼层级
-
-Spine 骨架中的各个骨骼都可以像 GUI 节点一样使用. 节点名就是 Spine 里设置的骨骼名.
-
-![Spine 骨骼名](images/gui-spine/bone.png){srcset="images/gui-spine/[email protected] 2x"}
-
-比如, 要做一个骨骼节点下增添一个节点, 使用 [`gui.get_spine_bone()`](/ref/gui#gui.get_spine_bone) 函数加节点名来获取此节点, 然后再在上面加入一个节点:
-
-```lua
--- Attach a text node to the tail of the cat
-local cat = gui.get_node("cat_node")
-local textnode = gui.new_text_node(vmath.vector3(400, 0, 0), "Hello tail!")
-local tail = gui.get_spine_bone(cat, "tail")
-gui.set_parent(textnode, tail)
-```
-
-同样可以用 [`gui.get_node()`](/ref/gui#gui.get_node) 函数获取骨骼节点, 此时引用名要用 Spine 节点名加正斜杠斜杠 (`/`) 加子节点名:
-
-```lua
--- Attach a text node to the tail of the cat
-local textnode = gui.new_text_node(vmath.vector3(400, 0, 0), "Hello tail!")
-local tail = gui.get_node("cat_node/tail")
-gui.set_parent(textnode, tail)
-```
+[该教程已被移至这里](/extension-spine).

+ 4 - 19
docs/zh/manuals/gui.md

@@ -88,19 +88,13 @@ Template node
 
 <div style="clear: both;"></div>
 
-Spine node
-: ![spine node](images/icons/spine-model.png){.left}
-  显示spine模型和动画. 详情请见 [Spine 节点教程](/manuals/gui-spine).
-
-<div style="clear: both;"></div>
-
 ParticleFX node
 : ![particlefx node](images/icons/particlefx.png){.left}
   显示粒子特效. 详情请见 [粒子特效节点教程](/manuals/gui-particlefx).
 
 <div style="clear: both;"></div>
 
-右键点击 *Nodes* 文件夹选择 <kbd>Add ▸</kbd> 然后点击 <kbd>Box</kbd>, <kbd>Text</kbd>, <kbd>Pie</kbd>, <kbd>Template</kbd>, <kbd>Spine</kbd> 或 <kbd>ParticleFx</kbd> 即可创建节点.
+右键点击 *Nodes* 文件夹选择 <kbd>Add ▸</kbd> 然后点击 <kbd>Box</kbd>, <kbd>Text</kbd>, <kbd>Pie</kbd>, <kbd>Template</kbd> 或 <kbd>ParticleFx</kbd> 即可创建节点.
 
 ![Add nodes](images/gui/add_node.png){srcset="images/gui/[email protected] 2x"}
 
@@ -152,15 +146,6 @@ Pie Fill Angle (pie 节点)
 Template (template 节点)
 : 节点模板界面文件. 详情请见 [Template 节点教程](/manuals/gui-template)
 
-Spine Scene (spine 节点)
-: 节点上显示的spine scene. 详情请见 [Spine 节点教程](/manuals/gui-spine)
-
-Default Animation (spine 节点)
-: 节点上自动播放的spine动画. 详情请见 [Spine 节点教程](/manuals/gui-spine)
-
-Skin (spine 节点)
-: 节点上使用的spine皮肤. 详情请见 [Spine 节点教程](/manuals/gui-spine)
-
 ParticleFX (particlefx 节点)
 : 节点上显示的粒子特效. 详情请见 [ParticleFX 节点教程](/manuals/gui-particlefx)
 
@@ -227,7 +212,7 @@ Adjust Mode
 
   如果场景的 *Adjust Reference* 设置为 `Disabled` 的话, 此设置被忽略.
 
-Clipping Mode (box, piespine 节点)
+Clipping Mode (box 和 pie 节点)
 : 剔除模式:
 
   - `None` 正常渲染.
@@ -235,10 +220,10 @@ Clipping Mode (box, pie 和 spine 节点)
 
   详情请见 [GUI 蒙版教程](/manuals/gui-clipping)
 
-Clipping Visible (box, piespine 节点)
+Clipping Visible (box 和 pie 节点)
 : 蒙版可见. 详情请见 [GUI clipping manual](/manuals/gui-clipping)
 
-Clipping Inverted (box, piespine 节点)
+Clipping Inverted (box 和 pie 节点)
 : 反转蒙版. 详情请见 [GUI clipping manual](/manuals/gui-clipping)
 
 

+ 0 - 1
docs/zh/manuals/importing-assets.md

@@ -24,7 +24,6 @@ Defold 支持 PNG 和 JPEG 图片格式. 其中 PNG 图片必须是 32 位 RGBA
 
 * 图片可以用来实现2D游戏常见的各种可视内容. 详情请见 [如何导入和使用2D图像](/manuals/importing-graphics).
 * 声音文件可以用 [声音组件](/manuals/sound)来播放.
-* Spine 动画数据可以用于 [Spine 组件](/manuals/spinemodel) 来显示.
 * 字体文件 可以用于 [Label 组件](/manuals/label) 和GUI中的 [text 节点](/manuals/gui-text).
 * Collada 模型可以用于 [Model 组件](/manuals/model) 来显示3D模型和动画. [关于3D模型导入详见这里](/manuals/importing-models).
 

+ 1 - 11
docs/zh/manuals/importing-graphics.md

@@ -5,7 +5,7 @@ brief: 本教程介绍了如何导入和使用2D图像.
 
 # 导入2D图像
 
-Defold 支持2D游戏常见的可视内容. 可以使用 Defold 制作静态或动态Sprite, UI 组件, 粒子特效, 瓷砖地图, 位图字体和 Spine 动画. 先导入图片文件再创建相应资源以使用它们. 把文件系统任意图片文件拖放到 Defold 编辑器的 *资源面板* 中即完成导入操作.
+Defold 支持2D游戏常见的可视内容. 可以使用 Defold 制作静态或动态Sprite, UI 组件, 粒子特效, 瓷砖地图 和 位图字体. 先导入图片文件再创建相应资源以使用它们. 把文件系统任意图片文件拖放到 Defold 编辑器的 *资源面板* 中即完成导入操作.
 
 ![Importing files](images/graphics/import.png){srcset="images/graphics/[email protected] 2x"}
 
@@ -71,13 +71,3 @@ Defold 支持 PNG 和 JPEG 图片格式. 其他格式要先转换成支持格式
   ![gui](images/graphics/gui.png){srcset="images/graphics/[email protected] 2x"}
 
 关于GUI详情请见 [GUI教程](/manuals/gui).
-
-![spine](images/icons/spine-model.png){.icon} Spine model
-: Spine models 从 Spine scene 资源中获取数据. 包括两部分:
-
-  1. 一个描述骨骼与动画的 Spine Json 文件.
-  2. 依附于骨骼的图片图集. Spine models 不能使用瓷砖图集资源.
-
-  ![spine](images/graphics/spine.png){srcset="images/graphics/[email protected] 2x"}
-
-关于 Spine models 详情请见 [Spine model 教程](/manuals/spinemodel).

+ 1 - 1
docs/zh/manuals/model-animation.md

@@ -5,7 +5,7 @@ brief: 本教程介绍了如何在 Defold 中使用 3D 动画.
 
 # 3D 蒙皮动画
 
-3D 模型的骨骼动画和 Spine 动画类似但是是针对于 3D 空间的. 3D 模型不是像剪裁动画那样先分成各个部分然后用骨骼连起来做动画. 而是使用骨骼精细控制模型上各个三角形如何移动.
+3D 模型使用骨骼控制模型上各个三角形的移动.
 
 关于如何导入 3D 模型动画, 详情请见 [模型教程](/manuals/model).
 

+ 0 - 9
docs/zh/manuals/properties.md

@@ -82,15 +82,6 @@ local color = gui.get_color(node)
 | *linear_damping* | 碰撞对象当前的线性阻尼. | `vector3` | `get+set`{.mark} |
 | *angular_damping* | 碰撞对象当前的旋转阻尼. | `vector3` | `get+set`{.mark} |
 
-*SPINE MODEL 组件属性*
-
-| 属性   | 描述                            | 类型            |                  |
-| ---------- | -------------------------------------- | --------------- | ---------------- |
-| *animation* | 当前动画. | `hash` | `get`{.mark} |
-| *skin*     | 当前皮肤. (不支持属性动画) | `hash` | `get+set`{.mark} |
-| *cursor*   | 当前动画播放头 (取值范围 0-1). | `number` | `get+set`{.mark} |
-| *playback_rate* | 当前动画播放速率. 即播放速度倍数. | `number` | `get+set`{.mark} |
-
 *MODEL (3D) 组件属性*
 
 | 属性   | 描述                            | 类型            |                  |

+ 0 - 1
docs/zh/manuals/shader.md

@@ -49,7 +49,6 @@ Attributes
 : 顶点上的相关属性. 属性经由引擎传送给着色器. 只要在着色程序中声明一下即可使用. 不同类型组件有不同的属性:
   - Sprite 有 `position` 和 `texcoord0`.
   - Tilegrid 有 `position` 和 `texcoord0`.
-  - Spine model 有 `position` 和 `texcoord0`.
   - GUI node 有 `position`, `textcoord0` 和 `color`.
   - ParticleFX 有 `position`, `texcoord0` 和 `color`.
   - Model 有 `position`, `texcoord0` 和 `normal`.

+ 1 - 242
docs/zh/manuals/spine.md

@@ -3,245 +3,4 @@ title: Defold 中的 Spine 骨骼动画
 brief: 本教程介绍了如何通过 _Spine_ 或者 _Dragon Bone_ 把骨骼动画带入 Defold.
 ---
 
-# Spine 动画
-
-_Spine_ 是由 Esoteric Software 开发的第三方动画工具, 可以让你使用 _骨骼_ 绑定的技术创建动画. 这对于角色或者动物动画非常方便, 对制作其他动画也很有帮助, 比如绳子, 车辆或者树叶.
-
-![Spine animation](images/animation/spine_animation.png){.inline}
-![Run loop](images/animation/frog_runloop.gif){.inline}
-
-Defold 实现了 [Spine JSON 格式](http://esotericsoftware.com/spine-json-format) 的运行时和动画表达.
-
-Defold 支持了主要的 Spine 动画功能, 包括反向运动学 (IK).
-
-::: 注意
-目前, Defold 不支持翻转 X 或者 Y 轴的动画关键帧. Defold 只支持骨骼驱动的网格动画, 不支持单个三角形顶点动画. 一定要做的话就用骨骼 100% 绑定一个三角形来做骨骼动画.
-:::
-
-::: 注意
-Defold 支持 Spine runtime 2.x 功能. 少量支持 Spine 3.x 功能. 为了保证兼容性请只使用 Spine 2.x 功能!
-:::
-
-## 概念
-
-*Spine JSON 数据文件*
-: 此数据文件包含骨架, 所有图片插槽名, 皮肤和动画数据. 虽然图片文件并不嵌入在这个文件里. Spine 和 Dragon Bones 都可以生成这个文件, 喜欢用哪个就用哪个.
-
-*Spine scene*
-: 把 Spine JSON 数据文件和 Defold 图集文件做捆绑以便在骨骼插槽上显示图片内容.
-
-*Spine model*
-: _SpineModel_ 组件是最终游戏对象里用的用于显示动画的组件. 此组件包含骨骼游戏对象树状关系, 要播放的动画, 要使用的皮肤以及渲染时要使用的材质. 详情请见 [SpineModel 教程](/manuals/spinemodel).
-
-*Spine Node*
-: 在 GUI 场景播放 Spine 动画用的组件, 相当于游戏场景的 Spine model 组件. 详情请见 [GUI spine 教程](/manuals/gui-spine).
-
-## 动画工具
-
-Defold 支持的 Spine JSON 数据文件可以用 Esoteric Software 的 _Spine_ 软件, 或者 _Dragon Bones_ 软件输出.
-
-_Spine_ 软件主页 http://esotericsoftware.com
-
-![Spine](images/spine/spine.png)
-
-_Dragon Bones_ 软件主页 http://dragonbones.com
-
-![Dragon Bones](images/spine/dragonbones.png)
-
-::: 注意
-_Dragon Bones_ 输出的 Spine JSON 数据文件应该能正常使用. 如果发现 _Dragon Bones_ 输出文件在 Defold 中显示不正确, 我们推荐先用官方 [Spine Skeleton Viewer](http://esotericsoftware.com/spine-skeleton-viewer) 检查数据是否能正确读出. Spine Skeleton Viewer 能够指出数据文件问题所在, 比如实例或者数据项缺失.
-:::
-
-
-## 导入 Spine 角色和动画
-
-在 Spine 创建好模型和动画之后, 可以方便地导入到 Defold 中:
-
-- 把动画输出为 Spine JSON 版本文件.
-- 把输出的 JSON 文件放入项目目录中.
-- 把所需所有碎图放入项目目录中.
-- 把所有碎图建立 _图集_. (建立图集相关内容请参考 [2D 图像教程](/manuals/2dgraphics) 以及下面列举的一些注意事项)
-
-![Export JSON from Spine](images/spine/spine_json_export.png)
-
-如果使用 _Dragon Bones_, 选择 *Spine* 作为输出类型. 选择 *Images* 作为图片类型. 这样可以把 *.json* 及其所需图片输出到一个文件夹中. 如上所属导入 Defold 即可.
-
-![Export JSON from Dragon Bones](images/spine/dragonbones_json_export.png)
-
-数据存入 Defold 后, 就可以创建 _Spine scene_ 资源文件了:
-
-- 新建 _Spine scene_ 资源文件 (从主菜单选择 <kbd>New ▸ Spine Scene File</kbd>)
-- 双击文件打开 spine scene 编辑器.
-- 设置 *Properties*.
-
-![Setup the Spine Scene](images/spine/spinescene.png){srcset="images/spine/[email protected] 2x"}
-
-Spine Json
-: Spine JSON 数据文件.
-
-Atlas
-: Spine 动画需要的图集.
-
-## 创建 Spine model 组件
-
-创建并配置好 _Spine scene_ 之后, 就可以创建 SpineModel 组件了. 详情请见 [SpineModel 教程](/manuals/spinemodel).
-
-## 创建 Spine GUI nodes
-
-在 GUI 场景也可以使用 Spine 动画. 详情请见 [GUI spine 教程](/manuals/gui-spine).
-
-## 播放 Spine 动画
-在 Spine 模型上播放动画, 只需调用 [`spine.play_anim()`](/ref/spine#spine.play_anim) 函数:
-
-```lua
-local function anim_done(self)
-    -- 动画播放完成, 做其他事情...
-end
-
-function init(self)
-    -- 在 "spinemodel" 组件上播放 "walk" 动画同时与上一个动画
-    -- 在前 0.1 内混合, 然后进行回调.
-    local anim_props = { blend_duration = 0.1 }
-    spine.play_anim("#spinemodel", "run", go.PLAYBACK_LOOP_FORWARD, anim_props, anim_done)
-end
-```
-
-![Spine model in game](images/animation/spine_ingame.png){srcset="images/animation/[email protected] 2x"}
-
-如果动画是以 `go.PLAYBACK_ONCE_*` 模式播放, 然后在 `spine.play_anim()` 里指定回调函数, 则动画播放完成后会调用回调函数. 关于回调函数详见下文.
-
-### 播放头
-
-除了 `spine.play_anim()` 还有更高级的方法, *Spine Model* 组件暴露了一个 "cursor" 属性可以通过 `go.animate()` 进行控制:
-
-```lua
--- 设置 spine model 动画但是不播放.
-spine.play_anim("#spinemodel", "run_right", go.PLAYBACK_NONE)
-
--- 设置播放头为 0
-go.set("#spinemodel", "cursor", 0)
-
--- 基于 in-out quad 缓动慢慢对播放头进行从 0 到 1 的 pingpong 补间.
-go.animate("#spinemodel", "cursor", go.PLAYBACK_LOOP_PINGPONG, 1, go.EASING_INOUTQUAD, 6)
-```
-
-::: 注意
-补间和设置播放头时, 时间轴事件不会被触发.
-:::
-
-### 骨骼层级
-
-Spine 骨架的各个骨骼实例在游戏对象内展示出来. 在 Spine model 组件的 *Outline* 视图内, 可以看到完整的嵌套关系. 在此层级嵌套关系中你可以看到骨骼的名称和其所在的位置.
-
-![Spine model hierarchy](images/animation/spine_bones.png){srcset="images/animation/[email protected] 2x"}
-
-通过骨骼名称, 就可以在运行时得到骨骼实例. 函数 [`spine.get_go()`](/ref/spine#spine.get_go) 返回指定骨骼的 id, 然后就可以用来进行设置父级之类的操作:
-
-```lua
--- 把手枪绑定到英雄手上
-local hand = spine.get_go("heroine#spinemodel", "front_hand")
-msg.post("pistol", "set_parent", { parent_id = hand })
-```
-
-### 时间轴事件
-
-Spine 动画可以基于精确的时间触发事件. 对于需要做同步行为的功能非常有帮助, 例如播放走路声音, 场景粒子效果, 在骨骼层级上进行绑定和解绑或者实现你需要的其他功能.
-
-在 Spine 软件里可以使用时间轴设置事件:
-
-![Spine events](images/animation/spine_events.png)
-
-各种事件由事件 id 表示 (上例中是 "bump") 而且时间轴上的事件可以包含一些数据:
-
-Integer
-: 整数值.
-
-Float
-: 浮点数值.
-
-String
-: 字符串值.
-
-动画播放遇到事件时, `spine_event` 消息会被发回到调用 `spine.play()` 函数的脚本上. 消息数据参数就是事件附带的数据, 连同其他一些有用的数据:
-
-`t`
-: 自动画播放第一帧开始经过的时间.
-
-`animation_id`
-: 动画名, 哈希值.
-
-`string`
-: 事件附带字符串值, 哈希值.
-
-`float`
-: 事件附带浮点数值.
-
-`integer`
-: 事件附带整数值.
-
-`event_id`
-: 事件 id, 哈希值.
-
-`blend_weight`
-: 此时动画混合情况. 0 表示动画还没有被混合, 1 当前动画混合 100%.
-
-```lua
--- Spine 动画包含与动画同步的音效.
--- 作为消息传到这里.
-function on_message(self, message_id, message, sender)
-  if message_id == hash("spine_event") and message.event_id == hash("play_sound") then
-    -- 播放动画音效. 事件数据包括声音组件和声音增益.
-    local url = msg.url("sounds")
-    url.fragment = message.string
-    sound.play(url, { gain = message.float })
-  end
-end
-``````
-
-## 播放完成回调函数
-
-动画播放函数 `spine.play_anim()` 可以在最后一个参数上传入Lua回调函数. 当动画播放完成时会调用这个函数. 对于循环动画和用 `spine.cancel()` 取消的动画不会调用回调函数. 回调函数里可以发送消息或者继续播放其他动画.
-
-```lua
-local function anim_done(self)
-    -- 播放完成, 做点什么...
-end
-
-function init(self)
-    -- 在组件 "spinemodel" 上播放 "walk" 并且与上个动画
-    -- 进行 0.1 秒的混合, 然后调用回调函数.
-    local anim_props = { blend_duration = 0.1 }
-    spine.play_anim("#spinemodel", "run", go.PLAYBACK_LOOP_FORWARD, anim_props, anim_done)
-end
-```
-
-## 播放模式
-
-动画可以单次播放也可以循环播放. 取决于播放模式:
-
-* go.PLAYBACK_NONE
-* go.PLAYBACK_ONCE_FORWARD
-* go.PLAYBACK_ONCE_BACKWARD
-* go.PLAYBACK_ONCE_PINGPONG
-* go.PLAYBACK_LOOP_FORWARD
-* go.PLAYBACK_LOOP_BACKWARD
-* go.PLAYBACK_LOOP_PINGPONG
-
-pingpong 模式先正向播放, 再反向播放.
-
-
-## 图集相关注意事项
-
-动画通过去掉图片文件后缀的方法识别引用图片. 在 Spine 软件里图片文件位于 *Images* 目录下:
-
-![Spine images hierarchy](images/spine/spine_images.png)
-
-上图中图片没有嵌套关系. 但是通常, 图片会被分组放入子目录下, 其引用就包含了子目录前缀. 比如, 骨骼插槽对文件 *head_parts/eyes.png* 的引用就是 *head_parts/eyes*. 输出的 JSON 文件图片引用也是这个所以 Defold 图集中图片名要与之相匹配.
-
-在 Defold 里 <kbd>Add Images</kbd> 时, 图片会以文件名去掉后缀的方法命名. 所以对于 *eyes.png* 自动命名就是 "eyes". 这样正好但是这是不带路径的情况.
-
-对于带路径的 "head_parts/eyes" 该怎么办? 最简单的办法就是建立动画组 (图集 *Outline* 视图根节点右键选择 *Add Animation Group*). 然后手动命名为 "head_parts/eyes" (名字里的 `/` 字符合法) 再把 "eyes.png" 放入这个动画组.
-
-![Atlas path names](images/spine/atlas_names.png){srcset="images/spine/[email protected] 2x"}
-
-关于 Spine 动画控制详情请见 [动画教程](/manuals/animation).
+[该教程已被移至这里](/extension-spine)

+ 1 - 75
docs/zh/manuals/spinemodel.md

@@ -3,78 +3,4 @@ title: Defold 中的 Spine 模型组件
 brief: 本教程介绍了在Defold中如何创建 SpineModel 组件.
 ---
 
-# Spine 模型
-
-SpineModel 组件用于把 _Spine_ 骨骼动画在 Defold 中呈现出来.
-
-## 创建 Spine Model 组件
-
-选择一个游戏对象:
-
-方法一 直接创建组件(<kbd>右键点击</kbd> 游戏对象选择 <kbd>Add Component ▸ Spine Model</kbd>)
-
-方法二 先创建文件 (在 *资源* 浏览器中 <kbd>右键点击</kbd>, 在上下文菜单中选择 <kbd>New... ▸ Spine Model</kbd>), 再在游戏对象上 <kbd>右键点击</kbd> , 选择 <kbd>Add Component File</kbd>).
-
-## Spine Model *属性*:
-
-除了常见的 *Id*, *Position* 和 *Rotation* 属性外, 还有 Spine Model 的特有属性:
-
-*Spine scene*
-: 设置先前创建的 Spine Scene.
-
-*Blend Mode*
-: 默认混合模式是 `Alpha`, 想用别的可以修改这个属性.
-
-*Material*
-: 如果想要使用自定义材质显示Spine模型, 在此指定.
-
-*Default animation*
-: 设置Spine模型默认的动画.
-
-*Skin*
-: 如果模型包含皮肤的话,这里可以设置Spine模型的默认皮肤.
-
-此时就可以在编辑器里看到Spine模型了:
-
-![编辑器中的Spine模型](images/spinemodel/spinemodel.png){srcset="images/spinemodel/[email protected] 2x"}
-
-### 混合模式
-:[blend-modes](../shared/blend-modes.md)
-
-## 运行时操作
-
-有一系列方法可以在运行时修改Spine模型 (参见 [API文档](/ref/spine/)).
-
-### 运行时动画
-
-Defold 提供强大的运行时控制动画的功能, 参见 [spine 动画教程](/manuals/spine).
-
-### 修改属性
-
-Spine模型可以使用 `go.get()` 和 `go.set()` 方法修改其属性:
-
-`animation`
-: 当前Spine模型动画 (`hash`) (只读). 使用 `spine.play_anim()` 方法来更改播放动画 (参见 [spine 动画教程](/manuals/spine)).
-
-`cursor`
-: 标准化动画头 (`number`).
-
-`material`
-: Spine模型材质 (`hash`). 可使用 `go.set()` 修改. 参见 [这个例子的 API 用法](/ref/spine/#material).
-
-`playback_rate`
-: 动画播放速率 (`number`).
-
-`skin`
-: 当前组件的皮肤 (`hash`).
-
-## 材质常量
-
-{% include shared/material-constants.md component='spine' variable='tint' %}
-
-`tint`
-: 3D网格颜色 (`vector4`). 四元数 x, y, z, 和 w 分别对应红, 绿, 蓝和不透明度.
-
-## 相关项目配置
-
-在 *game.project* 文件里有些关于Spine模型的 [设置项目](/manuals/project-settings#spine).
+[该教程已被移至这里](/extension-spine)