# 运行时架构

Spine运行时是可集成到应用程序中的一种软件组件, 用于加载和渲染从Spine导出的Skeleton(骨架)数据. 运行时十分灵活, 可自定义纹理加载的时机和方式、操纵骨骼(bone)、程序化动画, 还能对不同动画进行mix和分层(layering)等等操作.

[运行时汇总页](/spine-runtimes)列出了适用于各种编程语言及游戏工具的运行时.

# 许可

使用Spine运行时需要获得许可证, 如果你已经拥有了Spine许可证, 则可在不限量的应用程序中使用Spine运行时. 详情见 [Spine许可证](/spine-editor-license) 页面.

# 源代码

Spine运行时完整源代码托管在[GitHub](https://github.com/EsotericSoftware/spine-runtimes)上. 这套源代码是使用运行时的应用程序所必需的基础组件, 能让你可根据需求来定制或优化运行时.

可使用Git来克隆源码或在GitHub上点击绿色的"Clone or download"按钮, 再选择"下载ZIP"来下载源码.

本文档中的代码示例使用的是伪代码, 可轻松转换成任何语言跑在运行时上. 查看GitHub上的具体运行时页面(README.md文件)来访问具体运行时文档。

# 版本控制

Spine运行时可加载从Spine[导出](/spine-export)的数据. 须注意使用正确的Spine版本才能使Spine运行时成功加载数据. 建议冻结你的[编辑器版本](/spine-settings#版本)以便保持其与运行时版本一致. 我们在持续改进Spine及Spine运行时, 你可以定期更新你的运行时及编辑器版本。

运行时的[主分支](/git/spine-runtimes/tree)兼容最新的非beta版本Spine. 每个运行时的 README.md 文件将列出其兼容的具体版本.

原则上[beta版本](/spine-versioning#测试版)可能不兼容全部运行时, 但是某些运行时可能会率先可用. 如果你需要最新的运行时功能, 请使用带有beta名称的分支, 例如`4.2-beta`. 如果你感兴趣的运行时发布了beta更新, 那么beta分支中的代码便是最新代码. 请注意beta分支仍处于开发状态且尚未完工.

# 类图

此图显示了运行时的各组件是如何在一起组合协作的. 点击可查看原图.

[![](/img/runtimes-diagram.png)](/img/runtimes-diagram.png)

各对象类型的属性及方法均置于 [API参考文档](/spine-api-reference) 中.

# 数据对象

笼统地说, Skeleton数据会被加载到"Setup Pose Data"对象中, 并通常与texture atlas(纹理图集)合起来使用. 然后运行时会用这些数据对象创建Skeleton的"实例数据(Instance Data)"对象, 这些有状态对象与屏幕上显示的各Skeleton一一对应. 与实例对象不同, 数据对象是无状态的, 可在任意数量的Skeleton实例间共用.

有对应实例数据的数据对象, 其类名以"Data"结尾, 而没有对应实例数据的数据对象则无此后缀, 例如附件、皮肤和动画.

在多个Skelton实例中共用数据对象是高效实践, 因为数据只需加载一次. 但是如果修改了数据对象,这次修改会影响所有skeleton实例. 如果要只修改某一个实例的数据对象, 则必须复制这个数据对象然后仅将该实例的数据对象替换掉.

# 实例对象

实例对象有与其对应的数据对象类名相同, 只是没有"Data"后缀. 例如, SkeletonData是数据对象, 而Skeleton是实例对象.

实例对象与数据对象有许多属性都是相同的. 数据对象中的属性来自setup pose(初始姿势), 通常不会变动. 实例对象中的这些属性则表示播放动画时该实例的当前姿势.

每个实例对象都保存着对其数据对象的引用, 用于将实例对象重置回setup pose. 此外, 某些属性仅存在于数据对象中, 而不在实例对象中, 例如, 对象名称.

[下一节: 加载骨架数据](/spine-loading-skeleton-data)
[Spine运行时指南: 目录]