spine-libgdx 集成指南:在 libGDX 中加载、渲染 Spine 骨骼动画并发布到 Maven Central

📅 发布时间:2026/10/13 6:29:21
spine-libgdx 集成指南:在 libGDX 中加载、渲染 Spine 骨骼动画并发布到 Maven Central
游戏开发图形学【免费下载链接】spine-runtimes2D skeletal animation runtimes for Spine.项目地址https://gitcode.com/gh_mirrors/sp/spine-runtimes点击查看免费下载导读spine-libgdx 是 Spine 官方运行库Runtime面向 Java/libGDX 平台的实现用于加载、操控并渲染由 Spine 编辑器导出的骨骼动画数据。本文以 spine-libgdx/README.md 为主体结合仓库内真实源码与构建脚本完整覆盖Maven/Gradle 依赖接入、版本号规则、骨架数据加载与渲染管线、示例工程的运行方式、SkeletonViewer 的构建以及 spine-libgdx 与 spine-android 的联合发布流程。读完本文你将能够在自己的 libGDX 项目中独立完成 Spine 骨骼动画的接入、调试与发布。什么是 spine-libgdxspine-libgdx 运行库提供了一整套基于 libGDX 的 Spine 动画能力加载编辑器导出的骨架数据JSON 或二进制.skel、操控骨架骨骼、插槽、附件、约束并通过 libGDX 的Batch体系将其渲染到屏幕上。它的核心源码位于仓库的 spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine 目录下按功能分为三个包com.esotericsoftware.spine核心运行时包括 Skeleton.java、AnimationState.java、SkeletonJson.java约 1436 行、SkeletonBinary.java、SkeletonRenderer.java 以及 IK/Path/Physics/Transform 等约束与姿态Pose系统com.esotericsoftware.spine.attachments附件体系包括 AtlasAttachmentLoader.java、Region/Mesh/Clipping/Path/Point/Skeleton 附件以及序列帧Sequence支持com.esotericsoftware.spine.utils面向 libGDX 的便利封装包括 SkeletonActor.javascene2d Actor、SkeletonDrawable.java、SkeletonDataLoader.javaAssetManager 异步加载、SkeletonClipping.java、TwoColorPolygonBatch.java 等。README 明确说明spine-libgdx 与 Spine 4.3.xx 导出的数据兼容支持 Spine 的全部功能并作为官方运行库的参考实现reference runtime implementation。例如精灵图集atlas、剪裁clipping、网格mesh、双色着色two color tinting、物理physics、IK、路径约束等特性在 SkeletonRenderer.java 中都有对应实现路径。许可证与合规使用要点Spine Runtimes 采用专门的使用条款README 中的授权摘要值得每位集成者注意可以免费评估本仓库中的 Spine Runtimes 及示例可以免费将 Spine Runtimes 集成进自己的软件但软件的最终用户必须各自持有 Spine 许可证并且你有义务让用户知晓这一要求——这一模式通常被 SDK、游戏工具包或软件库开发者采用如果要把包含 Spine Runtimes 的软件分发给没有 Spine 许可证的其他人则需要在集成时持有 Spine 许可证此后可以任意分发但他人不得修改它或用它制作新软件否则需要自己的 Spine 许可证官方法律条款以 Spine Runtimes License Agreement 及 Spine Editor License Agreement 第 2 节为准。源码文件头部如SkeletonRenderer.java第 29 行起也内嵌了 2025 年 4 月 5 日修订的完整许可文本。版本号规则与当前仓库版本spine-libgdx 的版本号由编辑器主版本号 运行库更新号组合而成。README 给出的例子是4.1.10即对应编辑器 4.1、运行库第 10 次更新所有运行库版本均与对应major.minor编辑器版本导出的数据兼容。查看当前仓库的 spine-libgdx/gradle.properties可以看到当前处于 4.3 系列groupcom.esotericsoftware.spine version4.3.6-SNAPSHOT libgdx_version1.14.2version4.3.6-SNAPSHOT当前是 4.3 编辑器版本的第 6 次更新的快照构建libgdx_version1.14.2运行时依赖的 libGDX 版本。发布构建通过 Sonatype 发布到 Maven Central每提交一次代码还会通过 GitHub Actions 向快照仓库部署一次 SNAPSHOT 构建。SNAPSHOT 版本可在 Sonatype 快照仓库https://oss.sonatype.org/content/repositories/snapshots/com/esotericsoftware/spine/spine-libgdx/中查找。将 spine-libgdx 集成进 libGDX 项目README 提供了四种接入方式由简单到规范方式一直接复制源码不推荐把spine-libgdx/src目录的内容复制到自己的项目源码目录即可运行。README 明确指出这种方式虽然最简单但不是推荐做法——一般应当通过 Maven 或 Gradle 依赖来使用。方式二Maven 依赖在pom.xml中添加dependency groupIdcom.esotericsoftware.spine/groupId artifactIdspine-libgdx/artifactId version4.3.0/version /dependency如果需要使用 SNAPSHOT 版本还需把 Sonatype 快照仓库加入pom.xmlrepositories repository idnightlies/id urlhttps://oss.sonatype.org/content/repositories/snapshots//url /repository /repositories方式三Gradle 依赖在 libGDX 工程的根build.gradle中向core子项目添加依赖project(:core) { apply plugin: java dependencies { compile com.badlogicgames.gdx:gdx:$gdxVersion compile com.badlogicgames.gdx:gdx-box2d:$gdxVersion compile com.esotericsoftware.spine:spine-libgdx:4.3. } }需要注意4.3.这种写法会拉取最新的-SNAPSHOT发布。README 说明快照发布被视为稳定版本它基于 Spine Runtimes 中对应最新 Spine Editor 发布版本的分支最新提交。方式四本地构建并安装到本地 Maven 仓库也可以自行构建并安装到本地仓库cd spine-libgdx/spine-libgdx mvn install若通过 Gradle 构建整个仓库从根目录 spine-libgdx/build.gradle 可以看到编译配置的实际情况工程统一应用java与eclipse插件sourceCompatibility 17面向 IDE 支持、options.release 8产物兼容 Java 8并使用 jabel 注解处理器来平衡两者spine-libgdx模块通过java-library依赖com.badlogicgames.gdx:gdx:$libgdxVersion。仓库工程结构一览仓库根目录 spine-libgdx/settings.gradle 定义了三个 Gradle 子项目rootProject.name spine-libgdx-root include :spine-libgdx include :spine-libgdx-tests include :spine-skeletonviewerspine-libgdx运行库本体包含上述三个源码包并在构建时把**/*.gwt.xml作为资源一并打入见 build.gradle 中spine-libgdx项目的resources配置用于 GWT 模块支持spine-libgdx-tests示例与测试工程其src下包含 SimpleTest1.java、SkeletonAssetManagerTest.java、MixAndMatchTest.java、HeadlessTest.java 以及 AnimationState/AttachmentTimeline/EventTimeline/Physics 等系列测试assets目录内置了 spineboy、dragon、goblins、raptor、coin、snowglobe、celestial-circus、mix-and-match 等完整的.atlas/.json/.skel示例资源spine-skeletonviewer独立的骨架查看器程序其自身说明见 spine-skeletonviewer/README.md。另外settings.gradle 中有一个值得注意的逻辑如果仓库上级存在libgdx目录会把它作为 composite build 一并构建否则回退使用 Maven 依赖解析 libGDX。快速上手加载、动画与渲染一条龙以测试工程中的 SimpleTest1.java 为例这是「加载 → 播放 → 渲染」的完整范式。1. 加载图集与骨架数据atlas new TextureAtlas(Gdx.files.internal(spineboy/spineboy-pma.atlas)); SkeletonJson json new SkeletonJson(atlas); // 加载 JSON 骨架数据该数据是无状态的 json.setScale(0.6f); // 以 Spine 中尺寸的 60% 加载骨架 SkeletonData skeletonData json.readSkeletonData(Gdx.files.internal(spineboy/spineboy-pro.json));关键点SkeletonJson与SkeletonBinary都继承自抽象类 SkeletonLoader.java二者默认用AtlasAttachmentLoader将图集区域解析为附件readSkeletonData支持FileHandle与InputStream两种入口setScale(float)会在加载时统一缩放骨骼位置、图像尺寸与平移量便于运行时使用与 Spine 中不同尺寸的图片scale不允许为 0源码中会抛出IllegalArgumentException若.skel二进制文件则换用SkeletonBinary用法一致AtlasAttachmentLoader.java 还支持allowMissingRegions选项当图集中缺少某个 region 时若为false默认会直接抛异常便于快速发现导出不一致。2. 创建 Skeleton 实例与动画状态skeleton new Skeleton(skeletonData); // Skeleton 持有骨架状态骨骼位置、插槽附件等 skeleton.setPosition(250, 20); AnimationStateData stateData new AnimationStateData(skeletonData); // 定义动画间的混合crossfade stateData.setMix(run, jump, 0.2f); stateData.setMix(jump, run, 0.2f); state new AnimationState(stateData); // 持有骨架的动画状态当前动画、时间等 state.setTimeScale(0.5f); // 将所有动画放慢到 50% 速度 // 在轨道 0 上排队动画 state.setAnimation(0, run, true); state.addAnimation(0, jump, false, 2); // 2 秒后跳跃 state.addAnimation(0, run, true, 0); // 跳跃结束后继续跑AnimationStateData负责定义动画之间的混合时长AnimationState.setTimeScale可全局调速setAnimation与addAnimation构成轨道track队列支持循环参数与延迟参数。3. 每帧渲染循环float delta Gdx.graphics.getDeltaTime(); state.update(delta); // 更新动画时间 state.apply(skeleton); // 用当前动画摆放骨架设置骨骼局部 SRT skeleton.update(delta); // 推进骨架时间骨架含物理时必需 skeleton.updateWorldTransform(Physics.update); // 由局部 SRT 计算全局 SRT batch.begin(); renderer.draw(batch, skeleton); // 绘制骨架图像 batch.end(); debugRenderer.draw(skeleton); // 绘制调试线条这段每帧流程update → apply → updateWorldTransform → draw是 spine-libgdx 所有示例共用的标准管线也出现在 SkeletonAssetManagerTest.java、MixAndMatchTest.java 等测试中。4. 选择合适的 BatchSkeletonRenderer 的三个绘制入口SkeletonRenderer.java 提供了三个重载的draw方法能力逐级增强入口能力说明draw(Batch, Skeleton)基础渲染仅支持 Region 附件与嵌套骨架遇到 Mesh 或 Clipping 附件会直接抛异常提示需要更高阶的 Batchdraw(PolygonSpriteBatch, Skeleton)网格渲染支持 mesh、剪裁但不支持双色着色two color tintingdraw(TwoColorPolygonBatch, Skeleton)完整渲染支持网格、剪裁与双色着色配合batch.drawTwoColor提交顶点从源码看draw(Batch, …)会先做运行时类型判断若传入的是TwoColorPolygonBatch或PolygonSpriteBatch自动分发到对应的高阶方法。此外渲染器内部按插槽的BlendMode切换混合函数并通过SkeletonClipping完成剪裁clipStart/clipTriangles/clipEnd。5. 预乘 AlphaPMA开关renderer new SkeletonRenderer(); renderer.setPremultipliedAlpha(true); // PMA 能在不出现描边的情况下得到正确混合源码中setPremultipliedAlphaColors/setPremultipliedAlphaBlendModes/setPremultipliedAlpha三者的关系是前者控制颜色是否在送往 GPU 前乘以 alphalibGDX 默认 batch 着色器不做乘法因此开启 PMA 时必须置为true中者控制是否使用预乘 alpha 的混合模式后者一次性设置两者。测试示例中加载*-pma.atlas时均配套开启 PMA二者必须匹配。6. 与 scene2d UI 集成如果项目使用 scene2d可以用 SkeletonActor.javaActor或 SkeletonDrawable.javaDrawable把骨架直接放进 UI 舞台SkeletonActor.act(float)内部自动执行state.update(delta)与state.apply(skeleton)draw时同步处理parentAlpha与骨架颜色并在绘制后默认恢复 Batch 的混合函数——resetBlendFunction置为false可减少部分场景下的 batch flush但其他渲染可能需要自行先设置混合函数。7. 通过 AssetManager 异步加载推荐spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/utils/SkeletonDataLoader.java 提供了 libGDXAssetManager的加载器示例见 SkeletonAssetManagerTest.javaassetManager new AssetManager(); assetManager.setLoader(SkeletonData.class, new SkeletonDataLoader(assetManager.getFileHandleResolver())); float scale 0.6f; assetManager.load(spineboy/spineboy-pro.json, SkeletonData.class, new SkeletonDataParameter(spineboy/spineboy-pma.atlas, scale));SkeletonDataLoader的规则以.skel结尾的文件按二进制解析否则按 JSON 解析SkeletonDataParameter可指定atlasName、自定义AttachmentLoader或scale若三者都未指定则默认加载与骨架文件同名的.atlas作为依赖资源见其getDependencies实现。加载完成后用assetManager.get(...)取回SkeletonData再创建实例即可。8. 运行时换装Skin APIMixAndMatchTest.java 展示了如何把多套皮肤合并成一套自定义皮肤Skin mixAndMatchSkin new Skin(custom-girl); mixAndMatchSkin.addSkin(skeletonData.findSkin(skin-base)); mixAndMatchSkin.addSkin(skeletonData.findSkin(eyes/violet)); mixAndMatchSkin.addSkin(skeletonData.findSkin(hair/brown)); mixAndMatchSkin.addSkin(skeletonData.findSkin(clothes/hoodie-orange)); // ... 更多部件皮肤 skeleton.setSkin(mixAndMatchSkin);这正是 mix-and-match 示例资源仓库examples/mix-and-match在运行库层面的支撑。9. 调试渲染SkeletonRendererDebug.java 基于ShapeRenderer绘制调试信息骨骼线红色、骨骼原点绿色、附件线、mesh 三角面、包围盒AABB、路径与剪裁区域等均可通过setBoundingBoxes、setRegionAttachments等方法开关。它还根据premultipliedAlpha选择GL_ONE或GL_SRC_ALPHA混合源因子与渲染器保持一致的混合语义。10. 无头Headless测试HeadlessTest.java 可在无 GPU 环境下验证加载与动画正确性它用MockTexture/HeadlessTextureAtlas替代真实纹理按参数skeleton-path atlas-path [animation1] [animation2]加载骨架、采样动画帧并以 JSON 输出骨架数据、骨架状态、动画状态及过渡transition过程中的采样帧可作为 CI 回归校验手段。其对应的 fat jar 任务Main-Class: com.esotericsoftware.spine.HeadlessTest已在 build.gradle 的spine-libgdx-tests项目中定义。运行示例工程克隆仓库后有两种方式加载工程直接用 IntelliJ IDEA 或 Eclipse 打开 spine-libgdx/build.gradle或在命令行执行./gradlew eclipse由 Gradle 生成 Eclipse 工程文件。spine-libgdx-tests子项目内置了大量可查看、可运行的示例SimpleTest1/SimpleTest2/SimpleTest3、IKTest、PhysicsTest系列、MixAndMatchTest、FboTest、NormalMapTest、SequenceTest、FrameByFrameTest等其中大多数类都带main方法可直接以Lwjgl3Application启动。构建环境方面Gradle Wrapper 固定为 Gradle 8.14.3见 gradle-wrapper.properties并需要 Java 17 工具链源码sourceCompatibility 17产物release 8。构建 SkeletonViewerSkeletonViewer 是一个独立的桌面骨架查看器。构建命令./gradlew spine-libgdx:jar spine-skeletonviewer.jar构建完成后可以在spine-skeletonviewer/build/libs/spine-skeletonviewer.jar找到它的 uber-jar将所有依赖打包进单个 jar通过java -jar spine-skeletonviewer.jar或直接在文件管理器中双击运行。从 build.gradle 的spine-skeletonviewer配置可见其jar任务把runtimeClasspath全部展开进 jarduplicatesStrategy INCLUDE并在 manifest 中写入Main-Class: com.esotericsoftware.spine.SkeletonViewer同时依赖spine-libgdx模块的jar任务。发布流程spine-libgdx 与 spine-android 联合发布README 的 Releasing 章节给出了完整的版本发布步骤。spine-libgdx 与 spine-android 是一起发布的后者使用 spine-libgdx/gradle.properties 中的版本号。整个流程围绕「版本号提交 → 打 tag → CI 触发 → 版本号 bump」展开第 1 步设置发布版本编辑spine-libgdx/gradle.propertiesversion4.3.2发布版本不得使用-SNAPSHOT后缀。第 2 步提交并推送版本号git add spine-libgdx/gradle.properties git commit -m [libgdx][android] Release 4.3.2 git push origin 4.3第 3 步为该提交打 tag 并推送git tag spine-libgdx-4.3.2 git push origin spine-libgdx-4.3.2该 tag 会触发 GitHub Actions 的发布工作流先校验 tag 版本再依次发布spine-libgdx与spine-android。第 4 步检查工作流结果与 Maven CentralREADME 特别提醒了两种需要甄别的情况如果 JReleaser 在上传/校验前失败则制品没有发布如果 JReleaser 上传并校验成功但在等待 Central Portal 发布步骤时超时GitHub 任务可能报失败——发布本身可能仍然成功。重试前应先到 Central Portal 或 Maven Central 确认实际状态。第 5 步升到下一个 SNAPSHOT 并推送# spine-libgdx/gradle.properties version4.3.3-SNAPSHOT git add spine-libgdx/gradle.properties git commit -m [libgdx][android] Begin 4.3.3-SNAPSHOT git push origin 4.3发布脚本与发布配置的源码支撑仓库内的自动化脚本与配置与上述手动步骤一一对应可作为自动化替代方案spine-libgdx/publish.sh读取gradle.properties中的version若含SNAPSHOT则执行./gradlew publishReleasePublicationToSonaTypeRepository发布快照若是正式版本则加-PRELEASE参数执行发布随后运行./gradlew jreleaserDeploy -PRELEASE通过 JReleaser 部署。脚本头部还注明了前置准备生成 PGP 密钥、注册 Central Portal 账号、生成用户 token并把这些凭据写入~/.gradle/gradle.propertiesMAVEN_USERNAME、MAVEN_PASSWORD、signing.gnupg.passphrasespine-libgdx/publishing.gradle为spine-libgdx模块配置maven-publish与 GPG 签名仅对正式版本签名SNAPSHOT 不签名发布坐标groupIdcom.esotericsoftware.spine、artifactIdspine-libgdxSNAPSHOT 直接发布到 Central 快照仓库正式版本则先落到根工程build/staging-deploy目录再交给 JReleaser 上传 Central Portalbuild.gradle 顶部声明了 JReleaser Gradle 插件org.jreleaser:jreleaser-gradle-plugin:1.18.0快照仓库地址可通过SNAPSHOT_REPOSITORY_URL覆盖。常见问题与注意事项汇总版本对应关系spine-libgdx 与 Spine 4.3.xx 编辑器导出数据兼容若使用其他大版本编辑器导出需要切换到对应的运行库版本分支。PMA 图集必须配合 PMA 开关加载*-pma.atlas时要把SkeletonRenderer.setPremultipliedAlpha(true)否则混合结果会出现描边或半透明错误。普通Batch无法渲染 mesh/clipping遇到「cannot render meshes」/「cannot perform clipping」异常请改用PolygonSpriteBatch或TwoColorPolygonBatch。4.3.依赖会拉到快照若希望固定稳定发布版应写明精确版本号。发布 tag 命名遵循spine-libgdx-版本号的约定CI 依赖它触发发布工作流。JReleaser 超时≠发布失败先到 Central Portal 确认再决定是否重试。相关文件索引用途路径运行库说明与发布流程本文主体spine-libgdx/README.md版本号与 libGDX 版本配置spine-libgdx/gradle.propertiesGradle 工程定义三个子项目spine-libgdx/settings.gradle构建、打包、JReleaser 配置spine-libgdx/build.gradleMaven 发布与签名配置spine-libgdx/publishing.gradle发布脚本spine-libgdx/publish.sh加载、动画、渲染完整示例spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SimpleTest1.javaAssetManager 异步加载示例spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SkeletonAssetManagerTest.java运行时换装示例spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/MixAndMatchTest.java无头测试CI 回归spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/HeadlessTest.java渲染器三入口实现spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonRenderer.java骨架加载器基类与缩放spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonLoader.java图集附件加载器spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/AtlasAttachmentLoader.javaAssetManager 加载器spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/utils/SkeletonDataLoader.javascene2d 集成spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/utils/SkeletonActor.java通过以上内容你可以从零开始在 libGDX 项目中接入 spine-libgdx理解其加载、动画、渲染与调试管线运行官方示例构建 SkeletonViewer并依据仓库提供的脚本与配置完成自身的版本发布。赞分享游戏开发图形学【免费下载链接】spine-runtimes2D skeletal animation runtimes for Spine.项目地址https://gitcode.com/gh_mirrors/sp/spine-runtimes点击查看免费下载相关推荐Paramiko SSH Agent 完全使用手册5步掌握免密码登录与Agent Forwarding实战Paramiko SSH Agent 完全使用手册5步掌握免密码登录与Agent Forwarding实战 Paramiko 是领先的 Python 原游戏开发图形学Apollo-11 AGC 数字化源码仓库贡献指南转录校验规则、格式规范与扫描件核对实操Apollo 11 AGC 数字化源码仓库贡献指南转录校验规则、格式规范与扫描件核对实操 导读 本文以 Translations/CONTRIBUTING.c游戏开发图形学django CMS如何渲染一个页面从URL到模板的请求生命周期全解析django CMS如何渲染一个页面从URL到模板的请求生命周期全解析 在 django CMS一个基于 Django 的开源企业级内容管理系统中当你访游戏开发图形学上一篇Windows右键菜单管理终极指南如何快速清理与自定义右键菜单下一篇专业实战深度优化Windows右键菜单性能的完整方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考