Compare commits

..
51 Commits
Author SHA1 Message Date
Yeomai 98f44890f8 Revert "编译windows版本连接器"
This reverts commit 97e6713cfd.
2026-11-07 22:52:01 +08:00
Yeomai 97e6713cfd 编译windows版本连接器 2026-11-07 22:49:13 +08:00
tianmo e626e685fc 修正 2026-11-07 15:12:13 +08:00
tianmo b3e9481fe5 开关设置 2026-11-05 18:04:57 +08:00
tianmo 98e5c435c8 更新版本记录 2026-11-05 17:39:39 +08:00
tianmo 8977463861 跟随导出效果 2026-11-04 17:45:21 +08:00
tianmo 517e92a00b 公告栏修正 2026-11-04 11:15:47 +08:00
tianmo 87d6561779 公告栏 2026-11-04 10:55:40 +08:00
tianmo 720e3e0ceb 俄语支持 2026-11-04 10:21:57 +08:00
tianmo 753e3b1e21 网页优化 2026-10-31 15:26:31 +08:00
tianmo ab32146e8d 新增欢迎页 2026-10-31 11:48:29 +08:00
tianmo a11d57f27f 默认序列帧修改 2026-10-30 19:27:27 +08:00
tianmo 5efee6d918 资源整理 2026-10-30 19:10:29 +08:00
tianmo 7062a60c73 显示修正 2026-10-29 18:49:55 +08:00
tianmo bae179eb93 功能修复 2026-10-29 18:43:11 +08:00
tianmo fed1015849 优化碰撞识别,加入暖场帧数 2026-10-29 17:20:05 +08:00
tianmo b8652acce0 增加报表 2026-10-28 16:13:18 +08:00
tianmo ca719ba1d4 加入追踪 2026-10-28 14:32:52 +08:00
tianmo 859c78173a 加入网站追踪 2026-10-28 14:26:04 +08:00
tianmo c93ec671da 混淆
使用 javascript-obfuscator 做标识符重命名、字符串数组编码和常量拆分。
在 vite build 后增加生产环境混淆步骤,开发环境保持源码可读。
关闭 sourcemap,避免直接暴露原始源码。
当前主包约 1.7 MB,建议先拆出第三方依赖,再只混淆应用自身代码,而不是整个 dist。
2026-10-27 16:40:33 +08:00
tianmo 5f7e30063b 位置修正 2026-10-27 16:06:22 +08:00
tianmo 67bf3921cc 收缩按钮 2026-10-27 16:02:18 +08:00
tianmo 0f578d29a4 独立显示修正 2026-10-26 10:26:17 +08:00
tianmo 7069b168de 面板布局更新 2026-10-24 19:30:32 +08:00
tianmo a417c9119d 悬浮导航 2026-10-24 18:52:25 +08:00
tianmo cffbd49eff 体积显示 2026-10-23 11:55:40 +08:00
tianmo 46083c8d2a 完善浏览器配置库与未保存提示
- 新增 IndexedDB 配置保存、加载、删除及批量导入导出

- 配置列表支持选中、双击加载和悬浮操作提示

- 新增未保存提示设置,默认关闭并持久化到浏览器

- 优化配置管理界面并同步九种语言文案

- 更新开发文档与生产构建产物
2026-10-23 11:48:21 +08:00
tianmo 8bd9154414 多语言调整 2026-10-22 18:51:26 +08:00
tianmo 04de5e5a8e 多国语言支持 2026-10-22 18:37:30 +08:00
tianmo b98c0333e6 中英双语 2026-10-22 18:13:43 +08:00
tianmo ea26af26ee 文档完善 2026-10-22 17:23:38 +08:00
tianmo 5d12bf895b 修复导出问题 2026-10-22 17:19:09 +08:00
tianmo d224939efd 子发射器 2026-10-22 16:49:53 +08:00
tianmo d4ebb18777 新编译 2026-10-22 14:14:43 +08:00
tianmo 2b8fd067b3 轴点功能修复 2026-10-22 12:04:29 +08:00
tianmo 4d54c87681 贴图轴点 2026-10-22 11:46:00 +08:00
tianmo c041503004 渲染顺序功能 2026-10-22 11:16:50 +08:00
tianmo aabf4ff693 修改粒子命名规则 2026-10-14 18:35:26 +08:00
tianmo 1ecbb6fc48 飞牛部署文档 2026-10-10 15:35:51 +08:00
tianmo 61b93f590c 新增飞牛 fpk 打包部署文档与 1.0.2 安装包
- Document/飞牛fpk打包与部署.md:记录 fnpack 准备、改版本号、npm run pack:fnos 打包、安装到 fnOS、装完必查项、常见排障与上架前待办;并记下入口形态从 CGI 改为端口服务的原因(CGI 入口在目标设备上桌面图标不注册、「打开」无反应)
- release/fnos/SpineParticle-1.0.2.fpk:端口服务形态安装包,service_port=27850、依赖 nodejs_v22,桌面图标与「打开」正常,包内自带 Windows/macOS 连接器下载物
- 打包用源码暂未入库,仅保留安装包与文档

影响面:飞牛端新增应用包与文档,网页端代码未改动。
2026-10-10 15:27:56 +08:00
tianmo 7745f0de1b Merge branch 'main' of http://gitlab.yeomai.site/Yeomai/SpineParticlesWeb 2026-10-09 17:23:01 +08:00
tianmo 2ba2b9c08a 时间轴交互与预览修正
- 界面文字全局禁止鼠标框选,输入类控件保留可选中
- 拖动时间轴立即暂停自动播放,避免与播放头抢时间轴
- 暂停时补齐未完成的帧缓存,拖动时间轴直接读取已烘焙帧,无需重新触发播放
- 循环持续的烘焙不再依赖从第 0 帧开始录制,避免整段缓存为空
2026-10-09 17:22:36 +08:00
tianmo 0f08224e1c Changes to be committed:
modified:   src/style.css
	modified:   src/views/Stage.vue
	modified:   src/views/Timeline.vue
2026-10-09 17:21:34 +08:00
tianmo d6232c9d66 修正时间轴末帧,导出补阶跃与循环段边界关键帧
- 时间轴:末帧按时长实际覆盖的整数帧计算,修掉 Spine 时长小数舍入多出的一帧,B 端与回放自动停在最后一帧
- 导出:粒子死亡、骨骼池复用、拖尾假死复活处统一写 curve: stepped 硬切,避免死区插值出滑动轨迹
- 导出:循环持续在开始/循环/结束段边界(如 30f/110f)对所有动画通道补关键帧,便于在 Spine 中直接拆分
- 精简器支持阶跃段,阶跃区间内不再补出过渡关键帧
- 补充 test:spine-json 回归用例:骨骼池复用阶跃边界、循环段边界
2026-10-09 17:05:53 +08:00
tianmo f249c019bc 资源整理 2026-09-22 17:30:38 +08:00
tianmo f54e90c21a 预设修改 2026-09-22 17:21:49 +08:00
tianmo abb4ac4acc 预设修改 2026-09-22 17:17:39 +08:00
tianmo 4f2c980bac 修改预设,力场形状显示开关 2026-09-22 16:58:44 +08:00
tianmo 5f3a4a33fe 增加涡流修改器 2026-09-22 15:58:28 +08:00
tianmo 3f2699a946 添加形状显示开关,修改默认参数 2026-09-22 14:42:21 +08:00
tianmo aadcf5cbcf 增加预设 2026-09-22 14:26:40 +08:00
299 changed files with 31029 additions and 45382 deletions

No files matched your search

@@ -0,0 +1,135 @@
SpineParticle 网站功能介绍
========================
网站地址:
https://spineparticles.yeomai.site/
一句话介绍
----------
SpineParticle 是一款运行在浏览器中的 Spine 粒子动画编辑器。它可以把粒子效果制作、实时预览并烘焙成可继续在 Spine 中编辑的骨骼动画工程。
适合谁使用
----------
- 游戏 UI 和 2D 特效设计人员
- Spine 动画师
- 需要制作技能、爆炸、火花、烟雾、拖尾等效果的美术人员
- 希望减少逐帧图片输出、保留动画可编辑性的团队
- 想在浏览器中快速验证粒子效果的开发者
主要功能
--------
1. 浏览器内粒子编辑
无需安装网页编辑器客户端,打开网站即可开始制作。可以创建粒子系统、碰撞体、贝塞尔路径,并加载 Spine 骨骼动画作为参考或跟随目标。
2. 完整的粒子参数
支持持续发射和爆发发射,可设置发射数量、速率、延迟、发射时长、生命周期、速度、缩放、旋转以及生命周期内变化。大多数参数支持固定、随机和曲线三种方式,并提供可视化曲线编辑。
3. 多种发射区域
可以使用点、圆形环带、矩形环带、锥形和自定义贝塞尔路径作为粒子出生区域。发射方向支持固定角度、随机范围、径向、路径法线和路径切线。
4. 丰富的粒子外观
每颗粒子可以使用单张图片或序列帧,并支持多图片按权重随机。图片可单独设置缩放、贴图轴点、颜色、生命周期渐变、透明度和混合模式。
5. 可视化贴图轴点
图片资源卡可以直接打开贴图轴点编辑器。支持拖动轴点、缩放画布、精确输入坐标、超出图片边界和全屏调整。轴点结果会烘焙到 Spine 附件偏移中。
6. 粒子修改器
提供移动噪声、重力、风力、力场、漩涡、阻尼、吸附、碰撞、拖尾、路径跟随和 Spine 骨骼跟随等效果。多个修改器可以组合使用。
7. 子发射器
粒子可以在出生、死亡或碰撞时触发另一个粒子系统,形成多层粒子效果。支持发射概率、触发延迟、碰撞次数限制,以及颜色、大小、旋转和生命周期继承。
例如,可以让主粒子死亡后生成火花,火花碰撞后再生成更小的碎片。
8. Spine 插槽显示层级
粒子可以在 Spine 的指定插槽图片之上或之下预览,并会跟随动画中的 drawOrder 自动调整。该功能用于编辑器预览,便于检查粒子与角色、武器、UI 元素之间的前后遮挡关系。
9. 时间轴与 AB 循环
底部时间轴可以播放、暂停、逐帧查看完整粒子效果,并自动计算子发射器带来的总时长。
AB 循环是一个独立功能开关。开启后会显示浮动输入窗,可以输入起点 A 和终点 B,单独检查某一段动画;关闭后按完整时间轴播放。
10. Spine 动画导出
粒子最终效果可以烘焙为 Spine 的骨骼、插槽、附件和动画时间轴,而不是导出成不可编辑的逐帧图片。
支持:
- Spine 3.8、4.0、4.1、4.2、4.3 JSON
- 图片资源 ZIP
- 通过本地连接器生成可继续编辑的 .spine 工程包
- 线性或平滑贝塞尔关键帧
- 可调导出 FPS
- 骨骼对象池
- 拖尾加权 Mesh
- 子发射器和碰撞结果烘焙
11. 工程保存与预设
可以保存和加载完整工程配置,也可以使用内置预设快速开始。场景对象支持复制、显隐和撤回。
12. 多语言界面
网站支持简体中文、繁体中文、英语、日语、韩语、法语、德语、葡萄牙语和西班牙语。首次访问会根据浏览器语言自动选择界面语言,也可以随时在画布顶部切换;选择结果会自动保存。
13. 浏览器本地配置库
点击“保存配置”可以为当前工程命名并保存到浏览器。配置列表支持快速加载、删除、单文件下载和全部打包下载。加载前会提示当前场景将被覆盖,避免误操作。
推荐使用流程
------------
1. 打开网站并创建粒子系统。
2. 选择发射模式、发射区域和粒子属性。
3. 添加图片或序列帧,调整颜色、透明度和贴图轴点。
4. 按需要组合重力、风力、碰撞、拖尾、吸附等修改器。
5. 添加子发射器,编排出生、死亡或碰撞后的二次效果。
6. 加载 Spine 资源,检查粒子与插槽的前后层级。
7. 使用时间轴或 AB 循环检查动画衔接。
8. 保存工程配置。
9. 导出 Spine JSON、图片包,或通过连接器生成 .spine 工程。
网站特点
--------
- 浏览器直接使用,工作流轻量
- 参数修改实时预览
- 粒子、碰撞、路径和 Spine 动画统一在一条时间轴中查看
- 支持复杂父子粒子效果
- 导出结果保留骨骼和插槽,可在 Spine 中继续修改
- 提供多版本 Spine 支持
- 配置、预设和导出文件可独立管理
使用说明
--------
编辑器右上角有“使用说明”按钮,包含创建对象、参数模块、时间轴、Spine 资源、连接器和导出流程的快速介绍。
如需生成 .spine 工程包,需要在本机安装并启动 SpineParticle 连接器。只导出 Spine JSON 或图片 ZIP 时,可直接在网页中完成。
简短介绍文案
------------
版本一:
SpineParticle 是一款浏览器端 Spine 粒子动画编辑器,支持粒子设计、子发射器、Spine 插槽层级预览和多版本动画烘焙导出,帮助你把粒子效果转换为可继续编辑的 Spine 工程。
版本二:
在浏览器中完成粒子制作、Spine 效果预览和骨骼动画导出。SpineParticle 支持碰撞、拖尾、路径跟随、父子发射器与 AB 循环检查,适合游戏特效和 Spine 动画工作流。
版本三:
SpineParticle 让粒子特效不再只能输出为逐帧图片。你可以实时编辑粒子、组合次级效果,并将最终动画烘焙为可编辑的 Spine 骨骼、插槽与关键帧数据。
+60
View File
@@ -0,0 +1,60 @@
# 浏览器配置库说明
## 存储方式
浏览器配置库使用 IndexedDB,不占用 `localStorage`。
数据库:
```text
SpineParticle.ProjectLibrary
```
对象仓库:
```text
projects
```
每条配置保存:
- 用户输入的名称;
- 完整编辑器配置 JSON;
- 保存时间;
- 文件大小。
实现位置:
```text
src/editor/projectLibrary.ts
```
## 保存
点击“保存配置”只打开命名弹窗并写入浏览器,不会下载文件。
同名配置已存在时会询问是否覆盖。
## 加载
点击列表中的“加载”后,会先提示:
```text
加载后会覆盖当前场景,未保存的修改将丢失。
```
用户确认后才恢复配置。
## 下载
- “下载当前配置”直接导出当前场景,不需要先保存到列表。
- 单条“下载”导出对应配置的 `.json` 文件。
- “下载所有配置”将列表中全部配置打包为 ZIP。
- 下载不会加载或覆盖当前场景。
## 限制
- IndexedDB 数据属于当前网站域名和当前浏览器。
- 清理浏览器数据、隐私模式或系统空间不足可能移除配置。
- 不同浏览器和设备之间不会同步。
- 下载到磁盘的文件仍应作为正式备份。
+6 -6
View File
@@ -66,9 +66,9 @@
例如:
```text
diwen_1.png
diwen_2.png
diwen_10.png
yanhua_1.png
yanhua_2.png
yanhua_10.png
```
会按照 `1 → 2 → 10` 排列。
@@ -76,13 +76,13 @@ diwen_10.png
界面明确显示实际播放顺序:
```text
已选择 13 帧,按 diwen_000.png-diwen_012.png 顺序播放
已选择 15 帧,按 yanhua_01.png-yanhua_15.png 顺序播放
```
阶段测试资源位于:
```text
public/序列帧测试/sg/
public/images/frame-sequence/yanhua/
```
### 2.3 播放模式
@@ -106,7 +106,7 @@ public/序列帧测试/sg/
sequenceFps
```
有效范围为 1~120 FPS,默认 30 FPS。序列帧索引根据粒子实际出生时间计算,不依赖浏览器刷新次数。
有效范围为 1~120 FPS,默认 15 FPS。序列帧索引根据粒子实际出生时间计算,不依赖浏览器刷新次数。
### 2.5 单粒子单骨骼原则
+482
View File
@@ -0,0 +1,482 @@
# 网页粒子系统 · 阶段十二开发日志
> 阶段定位:**子发射器、Spine 预览层级、贴图轴点、独立 AB 循环与多版本导出完善**
> 完成日期:2026-10-22
> 工程目录:`/Users/tianmokeji/Desktop/SpineParticle`
> 技术栈:Vue 3 + TypeScript + Pinia + PixiJS 7 + Spine Runtime + Vite
---
## 一、阶段结论
阶段十二在阶段十一的粒子编辑与 Spine 导出体系上,补齐了复杂效果编排和实际项目使用中需要的能力。
本阶段重点不再是单一粒子的基础参数,而是粒子系统之间的关系、粒子与 Spine 场景的关系,以及烘焙导出后的可编辑性。完成后的编辑器可以制作父粒子触发的多层子粒子效果,在 Spine 插槽上下预览粒子,对贴图轴点进行可视化调整,并使用独立的 A/B 区间检查循环衔接。
阶段十二主要完成:
1. 新增出生、死亡、碰撞三类子发射器事件;
2. 新增子发射器目标、发射概率、属性继承和碰撞触发上限;
3. 建立父子发射器关系、循环依赖保护和事件链深度限制;
4. 子发射器进入场景树嵌套显示,不再独立自动发射;
5. 时间轴增加子发射器活动区间、启动标记和完整时长计算;
6. AB 循环改为独立开关和上浮输入窗,不再依赖持续发射循环;
7. 新增粒子在 Spine 插槽图片之上、之下的预览层级;
8. 渲染层级支持运行时 drawOrder 变化,并保持世界坐标稳定;
9. 图片资源卡新增可视化贴图轴点编辑器;
10. 贴图轴点支持画布拖动、滚轮缩放、坐标输入和超出图片范围;
11. 贴图轴点写入 Spine 附件偏移,参与最终烘焙导出;
12. Spine JSON 导出扩展为 3.8、4.0、4.1、4.2、4.3;
13. 修复子发射器在导出前暂停补齐时没有进入逐帧事件录制的问题;
14. 修复子发射器因自身生命周期较短而被错误截断帧的问题;
15. 增加子发射器、碰撞次数、AB 循环和层级绑定的配置迁移。
阶段十二完成后,粒子编辑器已经具备从设计、组合、预览、循环检查到 Spine 烘焙导出的完整工作流。
---
## 二、子发射器系统
### 2.1 事件类型
每条规则可选择一种父粒子事件:
| 事件 | 触发时机 |
|---|---|
| 出生 | 父粒子刚生成时触发 |
| 死亡 | 父粒子生命周期结束时触发 |
| 碰撞 | 父粒子接触启用的碰撞对象时触发 |
事件规则包含:
- 目标粒子系统;
- 发射概率;
- 碰撞次数限制;
- 属性继承;
- 颜色继承方式。
### 2.2 目标系统
被任意有效事件规则引用的粒子系统会成为子发射器:
- 不再独立自动发射;
- 只由父粒子事件生成;
- 在场景对象列表中嵌套到父系统下方;
- 在时间轴中使用灰色子发射器轨道;
- 移除引用或关闭“开启子发射器”后恢复普通系统。
子发射器选择列表会排除自身和全部上游父系统,避免形成循环引用。
事件链最多继续两级,防止跨系统事件无限递归。
### 2.3 发射数量与延迟
子发射器仍使用自身的发射模式:
- 爆发模式:每次事件生成“单次数量”颗粒子;
- 持续模式:每次事件生成一颗事件粒子;
- 子发射器 `delay`:父事件之后再等待指定秒数;
- 延迟后的粒子仍会正常参与碰撞、修改器和生命周期更新。
### 2.4 碰撞次数限制
碰撞事件可设置“碰撞次数限制”:
- 默认值:1;
- 整数范围:1~4;
- 按每颗父粒子独立累计;
- 粒子出生时碰撞次数归零;
- 输入超出范围时立即钳制;
- 只在事件类型为“碰撞”时显示。
该参数用于抑制粒子反弹、悬停或反复进出碰撞体导致的同一颗父粒子重复生成子粒子。
### 2.5 属性继承
子发射器支持多选继承:
| 属性 | 当前语义 |
|---|---|
| 颜色 | 按通道相加,或使用父粒子颜色覆盖 |
| 大小 | 子粒子自身缩放 × 父粒子当前渲染缩放 |
| 旋转 | 作为子发射系统整体发射方向和初始朝向偏移 |
| 生命周期 | 覆盖子粒子生命周期,使用父粒子的完整 `maxLife` |
生命周期继承使用父粒子的完整生命周期,不使用剩余寿命,也不与子粒子自身寿命相加。
### 2.6 烘焙要求
子发射器不能脱离父事件单独预热。阶段十二修复了两处烘焙问题:
1. 暂停时为根系统补帧后,旧逻辑会过早将整段动画标记为已烘焙,导致导出跳过事件录制;
2. 导出器按系统自身生命周期截断帧,导致较晚出现的子发射器帧被裁掉。
现在只有所有系统都具备完整帧缓存才可标记烘焙完成;子发射器导出时保留完整录制时间轴。
---
## 三、时间轴与 AB 循环
### 3.1 子发射器时间轴
子发射器在时间轴上显示为灰色条:
- 起点为首次父事件时间加子发射器延迟;
- 末端包含最后一次触发后的粒子生命周期;
- 子发射器圆点标记系统启动时刻,不随子发射器 delay 拖动;
- 拖动灰色条会增加延迟,但不能移动到父事件发生之前;
- 总帧数会递归包含子发射器链;
- 子发射器延长总长后,预览视口会自动扩展;
- 关闭子发射器后,目标系统的独立时长重新计入总帧数。
### 3.2 持续循环
时间轴的持续循环按钮只控制播放是否回到起点,与 AB 区间开关相互独立。
### 3.3 AB 循环
AB 循环现在是一个独立开关:
- 关闭时不显示 A/B 输入框,播放完整时间轴;
- 开启时在时间轴上方浮出输入窗;
- A、B 由用户直接输入;
- 关闭后保留原值,下次开启可以继续使用;
- “持续循环”开启时,AB 区间重复播放;
- “持续循环”关闭时,播放到 B 后停止;
- AB 状态和数值会进入配置文件。
### 3.4 循环衔接原则
循环段仍遵守既有约束:
- A/B 必须是精确的衔接状态;
- 不通过复制首帧数值到尾帧制造表面闭环;
- 粒子位置跳变只允许发生在粒子不可见时;
- 循环开始、循环衔接和结束段需要在衔接帧强制 K 帧;
- 强制 K 帧用于保留当前状态,方便后续在 Spine 中拆分动画;
- 导出数据保留闭合边界,预览可以跳过数学边界帧避免停顿。
---
## 四、Spine 插槽渲染层级
### 4.1 预览层级
粒子系统可选择:
- 最上层;
- Spine 插槽;
- 指定插槽图片之上;
- 指定插槽图片之下。
插槽列表按 drawOrder 排列,并显示附件信息和搜索框。
### 4.2 动画 drawOrder
Spine 动画改变插槽绘制顺序时,编辑器会按当前动画帧的 drawOrder 重新解析实际挂载位置。
粒子容器使用坐标补偿抵消插槽骨骼变换,因此改变显示层级不会改变粒子在场景中的世界位置。
同一插槽可以同时承载多个粒子系统。
### 4.3 导出边界
渲染层级只影响编辑器预览,不写入 Spine 导出数据。
若需要粒子位于 Spine 插槽之间,应在 Spine 编辑器中建立对应层级,再放入烘焙后的粒子骨骼和插槽。
---
## 五、贴图轴点编辑器
图片资源卡增加“贴图轴点”开关。
开启后可以:
- 在图片预览中直接拖动轴点;
- 右键拖动画布;
- 使用滚轮缩放画布;
- 输入精确 X/Y 百分比;
- 将轴点设置在图片范围之外;
- 放大到全屏工作;
- 恢复默认居中;
- 重置当前图片轴点。
轴点十字线保持固定屏幕尺寸,并延伸为横竖无限长参考线。
轴点和开关状态跟随每张图片资源独立保存,不会因修改其他粒子参数而重置。
导出时轴点会转换为 Spine Region 附件的偏移,属于实际烘焙数据。
---
## 六、Spine 资源与多版本导出
### 6.1 Spine 场景对象
支持加载 Spine 的 skeleton、atlas 和图片资源,并提供:
- 动画列表与预览;
- 骨骼层级树;
- 骨骼搜索和选择;
- 插槽列表与附件名称;
- 动画 drawOrder;
- 粒子发射器跟随骨骼;
- 粒子预览插槽层级。
支持 Spine 3.8、4.0、4.1、4.2、4.3 资源预览。
### 6.2 JSON 导出
导出设置支持:
- Spine 3.8 / 4.0 / 4.1 / 4.2 / 4.3;
- 图片路径;
- 线性或平滑贝塞尔;
- 导出 FPS;
- 不写 fps;
- 整数帧对齐;
- 骨骼对象池;
- 排除无内容动画。
Spine 3.8 不支持 4.x 的逐通道数组贝塞尔,导出时会转换为经过容差精简的分段线性关键帧。
### 6.3 图片与工程包
导出入口包含:
- Spine JSON;
- images 图片 ZIP;
- 通过本地连接器生成 `.spine` 工程包。
连接器仅监听本机地址,使用已安装的 Spine 进行转换,并自动匹配项目 JSON 版本。
---
## 七、当前完整功能模块
### 7.1 配置管理
- 保存配置;
- 加载配置;
- 预设;
- 快捷键保存;
- 系统设置与工程配置分离;
- 配置版本校验和旧字段迁移。
- 配置保存到浏览器 IndexedDB,并显示本地配置列表;
- 列表支持加载、删除和单文件下载;
- 支持把全部浏览器配置打包为 ZIP 下载;
- 配置管理标题栏提供下载当前场景的快捷按钮;
- 加载本地配置前提示会覆盖当前场景。
### 7.2 场景对象
- 粒子系统;
- 碰撞体;
- 贝塞尔路径;
- Spine 资源;
- 对象复制;
- 显隐控制;
- 对象树和父子发射器嵌套。
### 7.3 发射模式
- 持续发射;
- 单次爆发;
- 延迟;
- 常规持续;
- 循环持续;
- 循环开始、纯循环、结束三段。
### 7.4 发射器形状
- 点;
- 圆形环带;
- 矩形环带;
- 锥形;
- 路径出生线;
- 固定、随机、径向、路径法线、路径切线角度。
### 7.5 粒子属性
- 生命周期;
- 速度;
- 缩放;
- 初始旋转;
- 生命周期内速度、缩放、旋转变化;
- 固定、随机、曲线取值;
- 多轴分离缩放。
### 7.6 外观与资源
- 单图与序列帧;
- 多图片权重随机;
- 图片缩放和贴图轴点;
- 固定色、随机色、生命周期渐变;
- 每张图片独立透明度;
- 正常、相加、相乘、滤色混合;
- 粒子系统透明度曲线。
### 7.7 修改器
- 移动噪声;
- 重力;
- 风力;
- 全局力场;
- 漩涡;
- 吸附;
- 阻尼;
- 碰撞与碰撞响应;
- 拖尾;
- 路径跟随;
- Spine 骨骼跟随;
- 子发射器。
### 7.8 时间轴
- 播放、暂停和逐帧;
- 持续循环;
- 独立 AB 循环;
- 自动总时长;
- 发射段和粒子存在段;
- Spine 动画条;
- 子发射器灰色条;
- 多动画归属;
- 循环段快捷范围已由独立 AB 输入替代。
### 7.9 导出
- Spine JSON;
- images ZIP;
- `.spine` 工程包;
- 子发射器事件结果烘焙;
- 碰撞结果烘焙;
- 路径和 Spine 跟随结果烘焙;
- 拖尾加权 Mesh;
- 关键帧精简;
- 结构校验。
### 7.10 多语言
- 使用 `vue-i18n` 管理中英文及后续语言;
- 当前支持简体中文、繁体中文、英语、日语、韩语、法语、德语、葡萄牙语和西班牙语;
- 语言下拉框位于画布顶部工具栏、背景图与使用说明之间;
- 首次访问按浏览器语言自动选择,无法匹配时回退英文;
- 自动识别结果和手动选择均写入浏览器缓存;
- 配置字段、Spine 枚举和导出数据保持语言无关,只切换显示文本;
- 页面标题、参数面板、时间轴、使用说明、配置状态和主要错误提示均随语言切换。
---
## 八、数据结构与兼容
阶段十二新增或完善的主要配置字段:
```text
ParticleEventRule.collisionLimit
TimelineState.abLoop
EditorConfigFile.timeline.playbackEndAuto
EditorConfigFile.timeline.abLoop
EmitterConfig.renderLayerMode
EmitterConfig.renderLayerSpineId
EmitterConfig.renderLayerSlotName
EmitterConfig.renderLayerSlotPosition
EmitterConfig.renderLayerFollowAttachment
ParticleImageResource.anchorX
ParticleImageResource.anchorY
```
旧配置处理:
- 缺少碰撞限制时补为 1;
- 缺少 AB 开关时默认关闭;
- 旧 B 帧若原本是完整末帧,加载时迁移到新的完整末帧;
- 无渲染层级字段时恢复“最上层”;
- 无轴点字段时恢复 0.5 / 0.5;
- 关闭“开启子发射器”后,保留规则但不再把目标识别为子发射器。
---
## 九、主要代码落点
| 文件 | 阶段十二职责 |
|---|---|
| `src/core/particleEmitter.ts` | 事件触发、碰撞计数、子粒子生成、属性继承 |
| `src/core/subEmitterIds.ts` | 子发射器引用、上游关系和循环依赖保护 |
| `src/core/subEmitterTiming.ts` | 子发射器触发区间和总时长 |
| `src/views/stage/emitterSync.ts` | 跨系统事件分发、概率、碰撞上限、自动发射切换 |
| `src/views/stage/renderLayer.ts` | 插槽渲染目标解析 |
| `src/views/Stage.vue` | 事件逐帧录制、帧缓存、子发射器烘焙 |
| `src/views/Timeline.vue` | 子发射器条、AB 循环浮窗、启动标记、视图缩放 |
| `src/views/ImageResourceCard.vue` | 图片轴点开关和资源卡入口 |
| `src/views/PivotEditor.vue` | 轴点画布、缩放、拖动和全屏编辑 |
| `src/views/particle-panel/ParticleModifiersSection.vue` | 子发射器卡片、继承和碰撞限制 UI |
| `src/views/particle-panel/ParticleAppearanceSection.vue` | 渲染层级和资源面板 |
| `src/export/spineJsonExporter.ts` | 多版本 JSON、子发射器完整帧导出、轴点偏移 |
| `src/editor/editorConfig.ts` | 配置保存、加载和旧配置迁移 |
| `src/store/particleStore.ts` | 时间轴、独立 AB、总帧数和播放范围 |
---
## 十、验证结果
阶段十二执行并通过:
```text
npm run test:particle-events
npm run test:sub-emitter-timeline
npm run test:timeline
npm run test:loop-seam
npm run test:render-layer
npm run test:spine-json
npm run test:vortex
npx vue-tsc -b
npm run build
```
浏览器实测包括:
- 出生、死亡、碰撞事件均能生成目标子粒子;
- 碰撞次数限制能减少重复触发;
- 关闭子发射器后,对象树、自动发射和时间轴恢复正常;
- Spine 插槽层级支持动画 drawOrder;
- 轴点画布支持拖动、滚轮缩放和超出边界坐标;
- AB 关闭播放完整时间轴,开启后按用户输入区间播放;
- 子发射器在导出前能生成完整帧缓存;
- 导出 JSON 包含一级和二级子发射器轨道;
- 当前测试场景导出骨骼数由错误的 8 根恢复为 140 根;
- `Burst_Collid_0`~`Burst_Collid_89` 已进入 Spine JSON;
- `dist/` 生产构建成功。
---
## 十一、当前边界
- 子发射器事件链最多两级;
- 碰撞次数限制为 1~4;
- 渲染层级仅影响编辑器预览,不参与 Spine 动画数据导出;
- 贴图轴点会烘焙进 Spine 附件偏移;
- `.spine` 工程包需要本机安装并启动连接器;
- Spine 3.8 的贝塞尔表达受旧格式限制,会转换为精简线性关键帧;
- 非常长的子发射器延迟会增加录制与导出时长;
- 预览循环和导出闭环继续遵守“精确衔接、不可见时才允许跳变”的约束。
---
## 十二、阶段十二最终状态
阶段十二完成后,SpineParticle 已具备:
- 多粒子系统父子事件编排;
- 出生、死亡、碰撞三种事件链;
- 子粒子颜色、大小、旋转和生命周期继承;
- 可控的重复碰撞触发;
- Spine 插槽上下预览层级;
- 可视化贴图轴点;
- 独立 AB 循环检查;
- 子发射器完整烘焙;
- Spine 3.8~4.3 JSON 导出;
- JSON、图片包和 `.spine` 工程包输出;
- 配置文件、预设、复制和撤回完整联动。
至此,阶段十二“复杂粒子编排与 Spine 生产链路完善”完成落盘。
+93
View File
@@ -0,0 +1,93 @@
# 预设文件维护说明
## 文件位置
预设配置放在:
```text
public/Preset/
```
预设索引:
```text
public/Preset/index.json
```
## 新增预设
1. 把新的预设配置放入 `public/Preset/`。
2. 重新启动开发服务或执行构建,索引会自动更新。
3. 部署时一起上传 `index.json`、预设文件和 `dist/`。
自动生成示例:
```json
{
"file": "8.烟花爆炸.json",
"name": {
"zh-CN": "8.烟花爆炸",
"zh-TW": "8.烟花爆炸",
"en": "8.烟花爆炸",
"ja": "8.烟花爆炸",
"ko": "8.烟花爆炸",
"fr": "8.烟花爆炸",
"de": "8.烟花爆炸",
"pt-BR": "8.烟花爆炸",
"es": "8.烟花爆炸"
}
}
```
## 规则
- `file` 是实际预设配置文件名,必须与磁盘文件完全一致。
- `name` 是下拉框显示名称,不参与文件加载。
- `name` 可以省略;省略时直接显示去掉 `.json` 后缀的文件名。
- `name` 也兼容旧版字符串格式和多语言对象格式。
- 文件名建议使用稳定、简洁的名称,可使用 ASCII。
- 当前生成器会把所有语言字段都填成文件名本身。
- 自动生成工具可以只输出文件记录:
```json
{
"file": "8.fireworks.json"
}
```
界面会显示为:
```text
8.fireworks
```
- 旧版字符串格式仍然兼容:
```json
{
"file": "8.fireworks.json",
"name": "8.烟花爆炸"
}
```
字符串格式会在所有语言中显示同一个名称。
## 回退顺序
当某种语言的名称缺失时,界面依次使用:
```text
当前语言 → English → 简体中文 → 文件名
```
验证命令:
```bash
npm run test:i18n
```
该命令会检查:
- 每个预设文件是否存在;
- 多语言名称字段格式是否有效;
- 语言包键和插值占位符是否一致。
+585
View File
@@ -0,0 +1,585 @@
# 飞牛 fnOS fpk 打包与部署
把网页粒子编辑器打包成飞牛 fnOS 应用包(`.fpk`),装到 NAS 后从桌面图标直接打开。本文是完整流程,照着做即可重复出包。
## 1. 一次性准备
**打包机**:开发用的 Mac/Windows/Linux 即可,需要 Node 环境(项目本来就有)。
**fnpack**:飞牛官方的打包工具,从 https://developer.fnnas.com/docs/cli/fnpack/ 下载对应平台版本(本项目实测 `fnpack-1.2.3-darwin-arm64`):
```text
chmod +x fnpack-1.2.3-darwin-arm64
mv fnpack-1.2.3-darwin-arm64 /usr/local/bin/fnpack # 或任意位置,后面用 FNPACK 指定
fnpack --help
```
**目标设备**:已初始化的飞牛 fnOS,管理员账号,有可用存储空间,开发机可访问。
## 2. 目录与职责
| 路径 | 作用 |
| --- | --- |
| `src/` | 前端源码,编辑器本体 |
| `dist/` | vite 构建产物,**网页端和飞牛包共用这一份** |
| `packaging/fnos/SpineParticle/` | fnOS 包工程:`manifest`、`cmd/`、`config/`、`app/ui/`、`app/server/`、图标 |
| `scripts/build-fnos-package.mjs` | 把 `dist/` 复制进包的 `app/www/` 并调用 fnpack |
| `release/fnos/` | 打好的 `.fpk`,作为发布物入库(和 `release/connector/` 下的连接器产物一样) |
包工程里 `app/www/` 由脚本生成,不要手改,改了也会被下次打包覆盖。
**注意**:`packaging/`、`scripts/build-fnos-package.mjs`、`src/editor/publicUrl.ts` 以及前端那几处配套改动**没有入库**,仓库里只有本文档和 1.0.2 安装包。第一次打包前按第 10 章重建一次即可,内容与原版一致。
## 3. 打包
(如果 `npm run pack:fnos` 不存在,先完成第 10 章的重建。)
**第一步,改版本号**:编辑 `packaging/fnos/SpineParticle/manifest`,改这两行(飞牛按版本号识别升级,重打包务必递增):
```ini
version=1.0.3
changelog=这次改了什么,面向用户写一句话
```
**第二步,执行打包**:
```text
npm run pack:fnos
```
它等价于 `npm run build && node scripts/build-fnos-package.mjs`:先做 vue-tsc 类型检查和 vite 构建,然后清空 `app/www/`、复制 `dist/`(自动排除 `.DS_Store`)、调用 `fnpack build`,最后把产物移到 `release/fnos/`。
**产物**:`release/fnos/SpineParticle-<version>.fpk`,当前约 2.6MB。
如果 `fnpack` 不在 PATH 里:
```text
FNPACK=/path/to/fnpack npm run pack:fnos
```
## 4. 安装到飞牛
方式一(图形界面):飞牛桌面 → 应用中心 → 左下角「手动安装」→ 选 `.fpk`。
方式二(命令行,需 SSH 到 NAS):
```text
appcenter-cli install-fpk SpineParticle-1.0.3.fpk
```
安装完成后 `cmd/install_callback` 会自动启动内置静态服务;如果应用中心显示未运行,手动点一次「启动」。装好刷新一次飞牛桌面(F5 或重新登录),桌面图标才会出现。
## 5. 装完必须验证的几项
| 检查项 | 预期 |
| --- | --- |
| 桌面图标 | 出现「Spine粒子编辑器」,点开是编辑器界面(`http://<飞牛地址>:27850/`) |
| 应用中心状态 | 显示运行中,可启动/停止 |
| 预设下拉 | 能加载出预设列表(读取 `/Preset/index.json`) |
| 连接器下载 | 帮助弹窗第 9 节两个下载按钮可用,能下到 exe 和 zip |
| 远程备用入口 | `<飞牛地址>/cgi/ThirdParty/SpineParticle/index.cgi/` 也能打开 |
| 连接器联动 | 本机启动连接器后,导出区显示「连接器可用 · Spine 已就绪」 |
## 6. 包形态说明(重要,避免走回头路)
当前用的是**端口服务**形态:
```ini
service_port=27850
install_dep_apps=nodejs_v22
ctl_stop=true
```
`app/server/server.mjs` 是 Node 写的静态服务,把 `app/www` 挂到 27850 端口,`cmd/main` 负责启停,桌面入口配置在 `app/ui/config`,指向该端口。
**为什么不用 CGI 入口**:`/cgi/ThirdParty/{appname}/index.cgi/` 这套(纯静态、不占端口)在开发机上打包校验能通过,页面直连也能打开,但在目标设备上桌面入口始终没注册——表现就是桌面没有图标、应用中心「打开」点了没反应。试过补 `protocol`/`port` 字段也无效,换成端口服务后立即正常。所以后续请沿用端口形态。
`app/ui/index.cgi` 保留着,仅作为远程访问备用入口,和端口走同一份 `www`。
## 7. 常见问题
| 现象 | 处理 |
| --- | --- |
| 桌面没有图标 / 「打开」没反应 | 确认应用状态是运行中;刷新(F5)或重新登录飞牛桌面 |
| 安装报依赖错误 | 确认 `manifest` 里 `install_dep_apps=nodejs_v22`,且设备能安装该运行时 |
| 端口被占用 | 同时改两处并保持一致:`manifest` 的 `service_port`、`app/ui/config` 的 `port`,然后重打包 |
| 外网点图标打不开 | 端口形态需要该端口可达;外网请用 `/cgi/ThirdParty/SpineParticle/index.cgi/` |
| 页面白屏或资源 404 | 前端构建已改为相对路径(vite `base: './'`),若做过路径相关改动,先跑 `npm run build` 再用新 `dist` 打包 |
| 服务起不来 | 看设备上 `/var/apps/SpineParticle/var/app.log` |
| 安装异常 | 看设备上 `/var/log/trim_app_center/error.log` |
## 8. 上架应用中心前待办
- 替换图标:`packaging/fnos/SpineParticle/` 下 `ICON.PNG`(64×64)、`ICON_256.PNG`(256×256),以及 `app/ui/images/icon_64.png`、`icon_256.png`,规格 sRGB、圆角方形、单文件 ≤1MB。目前是脚本生成的占位图。
- 核对 `manifest` 里的 `maintainer`、`maintainer_url`、`distributor`、`os_min_version`(现填 Yeomai / gitlab 地址 / 1.0.0)。
- 准备真实界面截图和测试材料。
- 通过飞牛开发者先锋群 / 开发者后台提交。
## 9. 提交代码时注意
- `dist/` 在版本库里是**跟踪状态**,重新构建会带出 assets 的增删(文件名带哈希),要和源码改动一起提交,否则别人拉下来跑出的页面和打包不一致。
- `release/fnos/*.fpk` 是发布物,按现有惯例入库;`packaging/fnos/SpineParticle/app/www/` 是构建中间产物,重建骨架后如果想让它不出现在 `git status` 里,自行往 `.gitignore` 加三行:
```text
/packaging/fnos/SpineParticle/app/www/
/packaging/fnos/SpineParticle/*.fpk
```
- 包的形态、端口、入口配置一旦上架,跨版本要保持稳定,改端口等于改变用户访问方式。
## 10. 附录:重建打包骨架
仓库里没有打包源码,只有本文档和安装包。按 10.1~10.6 重建一次,`npm run pack:fnos` 就能完整跑通。每个小标题就是文件路径,代码块原样存成该文件即可;下面的内容与打进 1.0.2 安装包的那份一致,重建后打出的包与 `release/fnos/SpineParticle-1.0.2.fpk` 相同(重建时把版本号往上加,见第 3 章)。
### 10.1 建目录
```bash
mkdir -p packaging/fnos/SpineParticle/{app/ui/images,app/server,cmd,config,wizard}
```
### 10.2 fnOS 包工程
#### packaging/fnos/SpineParticle/manifest
```ini
appname=SpineParticle
version=1.0.2
display_name=Spine粒子编辑器
desc=把粒子系统编辑并导出为 Spine 工程的网页编辑器:编辑、预览、导出 Spine Json 与图片包都在浏览器内完成,导出 .spine 工程需自备本机已安装并激活的 Spine,并运行应用内可下载的桌面连接器。本应用不包含 Spine 本体,与 Esoteric Software 无隶属关系。
changelog=改为端口服务形态:安装后自动启动内置静态服务,桌面图标与「打开」可正常使用。
platform=all
source=thirdparty
maintainer=Yeomai
maintainer_url=http://gitlab.yeomai.site/Yeomai/SpineParticlesWeb
distributor=Yeomai
distributor_url=http://gitlab.yeomai.site/Yeomai/SpineParticlesWeb
os_min_version=1.0.0
service_port=27850
install_dep_apps=nodejs_v22
desktop_uidir=ui
desktop_applaunchname=SpineParticle.Application
ctl_stop=true
```
#### packaging/fnos/SpineParticle/config/privilege
```json
{
"defaults": {
"run-as": "package"
},
"username": "spineparticle",
"groupname": "spineparticle"
}
```
#### packaging/fnos/SpineParticle/config/resource
```json
{}
```
#### packaging/fnos/SpineParticle/app/ui/config
```json
{
".url": {
"SpineParticle.Application": {
"title": "Spine粒子编辑器",
"icon": "images/icon_{0}.png",
"type": "url",
"protocol": "http",
"port": "27850",
"url": "/",
"allUsers": true
}
}
}
```
#### packaging/fnos/SpineParticle/app/ui/index.cgi
仅作为远程访问的备用入口,和端口形态共用同一份 `www`。
```bash
#!/bin/bash
# 静态页面入口:把 /cgi/ThirdParty/SpineParticle/index.cgi/ 之后的路径映射到应用目录下的 www。
# 前端由 vite 以相对路径构建(base: './'),所以入口地址必须带结尾斜杠。
BASE_PATH="/var/apps/SpineParticle/target/www"
URI_NO_QUERY="${REQUEST_URI%%\?*}"
case "$URI_NO_QUERY" in
*index.cgi/*) REL_PATH="${URI_NO_QUERY#*index.cgi}" ;;
*index.cgi)
printf 'Status: 301 Moved Permanently\r\nLocation: %s/\r\nContent-Type: text/plain; charset=utf-8\r\n\r\n' "$URI_NO_QUERY"
exit 0
;;
*) REL_PATH="/" ;;
esac
if [ -z "$REL_PATH" ] || [ "$REL_PATH" = "/" ]; then
REL_PATH="/index.html"
fi
TARGET_FILE="${BASE_PATH}${REL_PATH}"
if echo "$TARGET_FILE" | grep -q '\.\.'; then
echo "Status: 400 Bad Request"
echo "Content-Type: text/plain; charset=utf-8"
echo
echo "Bad Request"
exit 0
fi
if [ -d "$TARGET_FILE" ]; then
TARGET_FILE="${TARGET_FILE%/}/index.html"
fi
if [ ! -f "$TARGET_FILE" ]; then
echo "Status: 404 Not Found"
echo "Content-Type: text/plain; charset=utf-8"
echo
echo "Not Found"
exit 0
fi
case "$TARGET_FILE" in
*.html) CONTENT_TYPE="text/html; charset=utf-8" ;;
*.js) CONTENT_TYPE="text/javascript; charset=utf-8" ;;
*.css) CONTENT_TYPE="text/css; charset=utf-8" ;;
*.json) CONTENT_TYPE="application/json; charset=utf-8" ;;
*.png) CONTENT_TYPE="image/png" ;;
*.jpg|*.jpeg) CONTENT_TYPE="image/jpeg" ;;
*.svg) CONTENT_TYPE="image/svg+xml" ;;
*.zip) CONTENT_TYPE="application/zip" ;;
*) CONTENT_TYPE="application/octet-stream" ;;
esac
echo "Content-Type: ${CONTENT_TYPE}"
echo
cat "$TARGET_FILE"
```
#### packaging/fnos/SpineParticle/app/server/server.mjs
```javascript
// 端口服务形态的静态文件服务:把安装目录下的 www 暴露给飞牛桌面入口。
import { createReadStream } from 'node:fs'
import { stat } from 'node:fs/promises'
import { createServer } from 'node:http'
import { extname, resolve, sep } from 'node:path'
import { fileURLToPath } from 'node:url'
const ROOT = resolve(fileURLToPath(new URL('../www/', import.meta.url)))
const PORT = Number(process.env.SPINE_PARTICLE_PORT || process.env.TRIM_SERVICE_PORT || 27850)
const TYPES = {
html: 'text/html; charset=utf-8',
js: 'text/javascript; charset=utf-8',
css: 'text/css; charset=utf-8',
json: 'application/json; charset=utf-8',
png: 'image/png',
jpg: 'image/jpeg',
jpeg: 'image/jpeg',
svg: 'image/svg+xml',
zip: 'application/zip',
exe: 'application/octet-stream',
}
async function resolveFile(pathname) {
const target = resolve(ROOT, `.${decodeURIComponent(pathname)}`)
if (target !== ROOT && !target.startsWith(ROOT + sep)) return null
const info = await stat(target).catch(() => null)
if (!info) return null
if (info.isDirectory()) return resolveFile(`${pathname.replace(/\/?$/, '/')}index.html`)
return info.isFile() ? target : null
}
createServer(async (request, response) => {
const file = await resolveFile(new URL(request.url || '/', 'http://localhost').pathname)
if (!file) {
response.writeHead(404, { 'Content-Type': 'text/plain; charset=utf-8' })
response.end('Not Found')
return
}
response.writeHead(200, { 'Content-Type': TYPES[extname(file).slice(1).toLowerCase()] || 'application/octet-stream' })
createReadStream(file).pipe(response)
}).listen(PORT, '0.0.0.0', () => {
console.log(`Spine粒子编辑器已启动:http://0.0.0.0:${PORT}/ ,静态目录 ${ROOT}`)
})
```
#### packaging/fnos/SpineParticle/cmd/main
```bash
#!/bin/bash
# 端口服务:启动内置 Node 静态服务,供桌面入口通过 service_port 访问。
LOG_FILE="${TRIM_PKGVAR}/app.log"
PID_FILE="${TRIM_PKGVAR}/app.pid"
APP_DIR="${TRIM_APPDEST}/server"
PORT="${TRIM_SERVICE_PORT:-27850}"
export PATH=/var/apps/nodejs_v22/target/bin:$PATH
log_msg() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE"
}
check_process() {
kill -0 "$1" 2>/dev/null
}
status_app() {
if [ -f "$PID_FILE" ]; then
local pid
pid="$(head -n 1 "$PID_FILE" | tr -d '[:space:]')"
if [ -n "$pid" ] && check_process "$pid"; then
return 0
fi
rm -f "$PID_FILE"
fi
return 1
}
start_app() {
if status_app; then
return 0
fi
log_msg "Starting SpineParticle on port ${PORT}..."
cd "$APP_DIR" || exit 1
SPINE_PARTICLE_PORT="$PORT" node server.mjs >> "$LOG_FILE" 2>&1 &
echo "$!" > "$PID_FILE"
}
stop_app() {
log_msg "Stopping SpineParticle..."
if [ ! -f "$PID_FILE" ]; then
return 0
fi
local pid
pid="$(head -n 1 "$PID_FILE" | tr -d '[:space:]')"
if [ -z "$pid" ] || ! check_process "$pid"; then
rm -f "$PID_FILE"
return 0
fi
kill -TERM "$pid" 2>> "$LOG_FILE" || true
local count=0
while check_process "$pid" && [ "$count" -lt 10 ]; do
sleep 1
count=$((count + 1))
done
if check_process "$pid"; then
kill -KILL "$pid" 2>> "$LOG_FILE" || true
fi
rm -f "$PID_FILE"
}
case "$1" in
start)
start_app
;;
stop)
stop_app
;;
status)
if status_app; then
exit 0
fi
exit 3
;;
*)
echo "Unknown command: $1" > "$TRIM_TEMP_LOGFILE"
exit 1
;;
esac
```
#### packaging/fnos/SpineParticle/cmd/install_callback
```bash
#!/bin/bash
# 安装后直接拉起静态服务,省去用户手动点“启动”。
cd "$(dirname "$0")" && ./main start
exit 0
```
#### packaging/fnos/SpineParticle/cmd/uninstall_init
```bash
#!/bin/bash
# 卸载前停掉静态服务。
cd "$(dirname "$0")" && ./main stop
exit 0
```
#### packaging/fnos/SpineParticle/cmd/ 其余六个脚本
`install_init`、`upgrade_init`、`upgrade_callback`、`uninstall_callback`、`config_init`、`config_callback` 内容相同:
```bash
#!/bin/bash
exit 0
```
### 10.3 构建脚本
#### scripts/build-fnos-package.mjs
```javascript
// 把 dist/ 装进飞牛 fpk 项目并调用 fnpack 打包。
import { cpSync, existsSync, mkdirSync, readFileSync, renameSync, rmSync } from 'node:fs'
import { execFileSync } from 'node:child_process'
import { dirname, join, resolve } from 'node:path'
import { fileURLToPath } from 'node:url'
const root = resolve(dirname(fileURLToPath(import.meta.url)), '..')
const projectDir = join(root, 'packaging/fnos/SpineParticle')
const wwwDir = join(projectDir, 'app/www')
const distDir = join(root, 'dist')
if (!existsSync(join(distDir, 'index.html'))) {
console.error('缺少 dist/index.html,请先执行 npm run build')
process.exit(1)
}
if (!wwwDir.endsWith('/app/www')) throw new Error(`拒绝清空的目录:${wwwDir}`)
rmSync(wwwDir, { recursive: true, force: true })
cpSync(distDir, wwwDir, { recursive: true, filter: (source) => !source.endsWith('.DS_Store') })
execFileSync(process.env.FNPACK || 'fnpack', ['build'], { cwd: projectDir, stdio: 'inherit' })
const version = /^version\s*=\s*(.+)$/m.exec(readFileSync(join(projectDir, 'manifest'), 'utf8'))?.[1].trim()
const outDir = join(root, 'release/fnos')
const target = join(outDir, `SpineParticle-${version}.fpk`)
mkdirSync(outDir, { recursive: true })
rmSync(target, { force: true })
renameSync(join(projectDir, 'SpineParticle.fpk'), target)
console.log(`已生成 ${target}`)
```
### 10.4 恢复可执行权限
```bash
chmod +x packaging/fnos/SpineParticle/cmd/* packaging/fnos/SpineParticle/app/ui/index.cgi
```
### 10.5 图标(4 个 PNG)
规格:PNG 或 JPG、sRGB、正方形、单文件 ≤1MB、主体的圆角和留白贴近系统图标。
- `packaging/fnos/SpineParticle/ICON.PNG`(64×64)
- `packaging/fnos/SpineParticle/ICON_256.PNG`(256×256)
- `packaging/fnos/SpineParticle/app/ui/images/icon_64.png`
- `packaging/fnos/SpineParticle/app/ui/images/icon_256.png`
只是跑通流程的话,随便找一张方形图用 macOS 自带的 `sips` 缩放就行(正式上架要换成设计稿):
```bash
sips -z 256 256 源图.png --out packaging/fnos/SpineParticle/ICON_256.PNG
sips -z 64 64 源图.png --out packaging/fnos/SpineParticle/ICON.PNG
cp packaging/fnos/SpineParticle/ICON_256.PNG packaging/fnos/SpineParticle/app/ui/images/icon_256.png
cp packaging/fnos/SpineParticle/ICON.PNG packaging/fnos/SpineParticle/app/ui/images/icon_64.png
```
### 10.6 前端侧配套改动
这几处让前端在「域名根目录」和「子路径」两种部署下都能取到资源;少了 `publicUrl.ts` 会直接导致 `vue-tsc` 编译失败。
#### 新增 src/editor/publicUrl.ts
```typescript
// 应用可能部署在域名根路径,也可能部署在飞牛 fpk 的 /cgi/.../index.cgi/ 子路径下。
// 用文档地址解析相对路径,两种部署方式都能取到 public/ 下的静态资源。
export function publicUrl(path: string) {
return new URL(`${import.meta.env.BASE_URL}${path.replace(/^\/+/, '')}`, document.baseURI).href
}
```
#### vite.config.ts
在 `defineConfig({` 里的 `plugins` 之后加两行:
```typescript
// 相对路径:既要能部署在域名根目录,也要能跑在飞牛 fpk 的 /cgi/ThirdParty/SpineParticle/index.cgi/ 子路径下。
base: './',
```
#### package.json
`scripts` 里加一条:
```json
"pack:fnos": "npm run build && node scripts/build-fnos-package.mjs",
```
#### src/views/particle-panel/useProjectPresets.ts
顶部 import 区加一行:
```typescript
import { publicUrl } from '../../editor/publicUrl'
```
`refreshPresets` 和 `loadSelectedPreset` 里各有一处 fetch,改成用 `publicUrl` 解析:
```typescript
const response = await fetch(`${publicUrl('Preset/index.json')}?t=${Date.now()}`, { cache: 'no-store' })
```
```typescript
const response = await fetch(publicUrl(`Preset/${encodeURIComponent(file)}`), { cache: 'no-store' })
```
#### src/views/HelpDialog.vue
`<script setup>` 顶部加 import:
```typescript
import { publicUrl } from '../editor/publicUrl'
```
「下载」那一项里的两个链接改成用 `publicUrl`(原来是 `/downloads/...` 绝对路径):
```html
<a class="dl-link" :href="publicUrl('downloads/connector/SpineParticleConnector-windows-x64.exe')" download>Windows 版<br><small>SpineParticleConnector-windows-x64.exe</small></a>
<a class="dl-link" :href="publicUrl('downloads/connector/SpineParticleConnector-macos-universal.zip')" download>macOS 版(Universal)<br><small>SpineParticleConnector-macos-universal.zip</small></a>
```
「前置」那一项改写为说明 Spine 前提:
```html
<div><dt>前置</dt><dd>编辑器本身不包含 Spine:导出 <b>.spine</b> 工程需要你电脑上已安装并<b>激活</b>的 Spine(3.8 / 4.0 / 4.1 / 4.2 / 4.3),并启动下面下载的桌面版连接器。其余功能(编辑、预览、导出 Spine Json、导出 images 包)不依赖 Spine,也不需要连接器。</dd></div>
```
在「下载」之后插入「首次放行」一项:
```html
<div><dt>首次放行</dt><dd>连接器未做商业代码签名,系统会拦截一次,属正常提示:<b>Windows</b> 双击 exe,出现“Windows 已保护你的电脑”时点“更多信息”→“仍要运行”;<b>macOS</b> 解压后把 App 拖进“应用程序”,在 Finder 里按住 Control 点图标选“打开”再确认,若仍提示“已损坏”或“无法验证开发者”,到“系统设置 → 隐私与安全性”底部点“仍要打开”,或执行 <code>xattr -dr com.apple.quarantine "Spine粒子连接器.app"</code>。</dd></div>
```
### 10.7 重建后自检
```bash
npm run pack:fnos
```
能打出 `release/fnos/SpineParticle-<version>.fpk` 就说明骨架完整。想先确认前端和服务没问题,可以不依赖飞牛设备本地跑一次:
```bash
cd packaging/fnos/SpineParticle/app/server && SPINE_PARTICLE_PORT=27850 node server.mjs
```
然后浏览 `http://127.0.0.1:27850/`,应能看到编辑器界面。
@@ -1,11 +1,11 @@
{
"format": "SpineParticle.EditorConfig",
"version": 1,
"savedAt": "2026-09-14T09:25:05.330Z",
"savedAt": "2026-09-22T08:56:24.085Z",
"editor": {
"viewScale": 0.4038832279793692,
"viewX": 12.678891156789803,
"viewY": -24.27929100039178
"viewX": 2.0968599067898026,
"viewY": 31.98633399960822
},
"settings": {
"backgroundX": 0,
@@ -501,7 +501,17 @@
"emitterFollowDuration": 1,
"emitterFollowSpace": "world",
"emitterFollowDirection": "forward",
"emitterFollowOffset": 0
"emitterFollowOffset": 0,
"showShape": false,
"showForceFieldShape": true,
"vortex": false,
"vortexStrength": 10,
"vortexRadius": 100,
"vortexCenterX": 0,
"vortexCenterY": 0,
"vortexFalloff": "linear",
"showVortexShape": true,
"showAttractionShape": true
}
}
],
+526
View File
@@ -0,0 +1,526 @@
{
"format": "SpineParticle.EditorConfig",
"version": 1,
"savedAt": "2026-09-22T08:55:50.419Z",
"editor": {
"viewScale": 0.892857142857143,
"viewX": 11.598706236326507,
"viewY": 20.938181871950917
},
"settings": {
"backgroundX": 0,
"backgroundY": 0,
"backgroundOpacity": 1,
"backgroundImageName": "",
"backgroundImageData": "",
"showGrid": true,
"exportSettings": {
"imagesPath": "./images/",
"spineVersion": "4.2",
"keyframeCurve": "linear",
"fps": 30,
"omitFps": false,
"integerFrameAlignment": true,
"bonePool": true,
"excludeEmptyAnimations": false,
"fileName": "SpineParticle.json"
}
},
"timeline": {
"fps": 30,
"loop": true,
"playbackStart": 30,
"playbackEnd": 90,
"animations": [
"animation"
]
},
"selection": {
"type": "particle",
"id": 1
},
"scene": {
"systems": [
{
"id": 1,
"visible": true,
"animation": "animation",
"config": {
"imageResources": [
{
"id": 1,
"textureName": "fangkuai",
"textureFolder": "",
"previewUrl": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAALCAYAAABGbhwYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3BpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDkuMS1jMDAzIDc5Ljk2OTBhODdmYywgMjAyNS8wMy8wNi0yMDo1MDoxNiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpiYjU2OTA5Mi1hMDcxLTQ5OGEtOWI2ZC03MWM5NzM1MzcxNGIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NzlFMTgxMjdBQjY0MTFGMTkyNzBGQkVBQzczRDRDMDYiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NzlFMTgxMjZBQjY0MTFGMTkyNzBGQkVBQzczRDRDMDYiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDI3LjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoxNkE1NzlGNUFCNjMxMUYxOTI3MEZCRUFDNzNENEMwNiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoxNkE1NzlGNkFCNjMxMUYxOTI3MEZCRUFDNzNENEMwNiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pg86PbEAAAAtSURBVHjaYvz//38CAwMDGwN+8IURqPADkMFPQOEjJgYiwahCvICR2JgBCDAArewNoImb6KUAAAAASUVORK5CYII=",
"imageMode": "fixed",
"sequencePlayback": "loop-forward",
"sequenceFps": 30,
"sequenceFrames": [],
"weight": 100,
"locked": false,
"scale": 1,
"anchorX": 0.5,
"anchorY": 0.5,
"colorMode": "random",
"colorStart": "#ffffff",
"colorEnd": "#ff4d4d",
"colorGradient": [
{
"position": 0,
"color": "#ffffff"
},
{
"position": 1,
"color": "#ffd500"
},
{
"position": 0.27424823113207547,
"color": "#ffffff"
}
],
"blend": "normal",
"independentAlpha": "off",
"alpha": 1,
"alphaCurveMode": "跟随导出",
"alphaCurve": [
{
"x": 0,
"y": 0
},
{
"x": 0.1,
"y": 1
},
{
"x": 0.9,
"y": 1
},
{
"x": 1,
"y": 0
}
]
}
],
"imageWeightVersion": 1,
"name": "ParticleSystem1",
"mode": "stream",
"rate": 40,
"streamBehavior": "loop",
"loopDurationFrames": 60,
"generateLoopStartAnimation": true,
"loopStartUseCustomDuration": true,
"loopStartDurationFrames": 30,
"generateLoopEndAnimation": false,
"loopEndUseCustomDuration": false,
"loopEndDurationFrames": 30,
"burstCount": 50,
"burstLoop": false,
"delay": 0,
"duration": 1,
"shape": "rect",
"shapeRangeVersion": 1,
"innerRadius": 0,
"outerRadius": 20,
"innerRectW": 0,
"innerRectH": 0,
"outerRectW": 800,
"outerRectH": 36,
"spawnPathId": 0,
"spawnPathDistribution": "fixed",
"radius": 30,
"rectW": 60,
"rectH": 40,
"centerX": 0,
"centerY": 0,
"rootRotation": 0,
"rootScaleX": 1,
"rootScaleY": 1,
"emissionAngleMode": "radial",
"direction": -90,
"spread": 0,
"coneDirection": 90,
"coneAngle": 60,
"lifeMin": 0.6,
"lifeMax": 1.5,
"lifeMode": "random",
"lifeCurve": [
{
"x": 0,
"y": 0
},
{
"x": 1,
"y": 1
}
],
"speedMin": 30,
"speedMax": 140,
"speedMode": "random",
"speedCurve": [
{
"x": 0,
"y": 0
},
{
"x": 1,
"y": 1
}
],
"scaleMin": 0.3,
"scaleMax": 1,
"scaleMode": "random",
"scaleAxisMode": "uniform",
"scaleYMin": 0.3,
"scaleYMax": 0.8,
"scaleCurve": [
{
"x": 0,
"y": 0
},
{
"x": 1,
"y": 1
}
],
"scaleYCurve": [
{
"x": 0,
"y": 0
},
{
"x": 1,
"y": 1
}
],
"scaleEndRatio": 0.3,
"initialRotationMode": "fixed",
"initialRotationMin": 0,
"initialRotationMax": 360,
"initialRotationCurve": [
{
"x": 0,
"y": 0
},
{
"x": 1,
"y": 1
}
],
"alpha": 0.9,
"alphaEnd": 0,
"rotationSpeedMin": -180,
"rotationSpeedMax": 180,
"speedOverLifeEnabled": false,
"speedOverLifeMode": "fixed",
"speedOverLifeMin": 1,
"speedOverLifeMax": 1,
"speedOverLifeCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"scaleOverLifeEnabled": true,
"scaleOverLifeMode": "curve",
"scaleOverLifeAxisMode": "uniform",
"scaleOverLifeMin": 0,
"scaleOverLifeMax": 1,
"scaleYOverLifeMin": 0,
"scaleYOverLifeMax": 1,
"scaleOverLifeCurve": [
{
"x": 0,
"y": 1
},
{
"x": 0.79,
"y": 1
},
{
"x": 1,
"y": 0
}
],
"scaleYOverLifeCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"rotationOverLifeEnabled": false,
"rotationOverLifeMode": "random",
"rotationOverLifeCurve": [
{
"x": 0,
"y": 0
},
{
"x": 1,
"y": 1
}
],
"gravity": 980,
"gravityMode": "fixed",
"gravityMin": 980,
"gravityMax": 980,
"gravityDirection": -90,
"gravityCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"damping": 1,
"seed": 0,
"colorStart": "#ffffff",
"colorEnd": "#ff4d4d",
"colorOverLife": false,
"blend": "add",
"alphaMode": "curve",
"curveMode": "线性",
"alphaCurve": [
{
"x": 0,
"y": 0
},
{
"x": 0.2,
"y": 1
},
{
"x": 0.8,
"y": 1
},
{
"x": 1,
"y": 0
}
],
"textureName": "star",
"textureFolder": "",
"alphaScale": 1,
"anchorX": 0.5,
"anchorY": 0.5,
"independentAlpha": "off",
"offsetX": 0,
"offsetY": 0,
"noise": false,
"noiseAmt": 30,
"noiseRange": 100,
"noiseSpeed": 1,
"useGravity": false,
"wind": false,
"windX": 0,
"windY": 0,
"windMode": "fixed",
"windMin": 100,
"windMax": 100,
"windDirection": 0,
"windCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"forceField": false,
"forceStrength": 10,
"forceRadius": 100,
"forceCenterX": 0,
"forceCenterY": 0,
"forceFalloff": "linear",
"attraction": false,
"attractionCenterX": 200,
"attractionCenterY": 0,
"attractionRadius": 20,
"attractionDuration": 0.5,
"attractionDelay": 0.1,
"attractionDelayMode": "particle",
"attractionPath": "curve",
"trail": false,
"trailConfigVersion": 3,
"trailResources": [
{
"id": 1,
"textureName": "trail",
"previewUrl": "/images/trail.png",
"weight": 100,
"locked": false,
"rotation": 0,
"colorMode": "particle",
"color": "#ffffff",
"colorGradient": [
{
"position": 0,
"color": "#ffffff"
},
{
"position": 1,
"color": "#ffffff"
}
],
"blend": "normal",
"alphaMode": "particle",
"alpha": 1,
"alphaCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"boneCount": 3,
"trailRatio": 100,
"lengthMode": "fixed",
"length": 100,
"lengthMin": 100,
"lengthMax": 100,
"widthSizeMode": "fixed",
"width": 100,
"widthMin": 100,
"widthMax": 100,
"widthMode": "particle",
"lifeLengthEnabled": false,
"lifeLengthCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"shapeEnabled": false,
"shapeCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
]
}
],
"trailResourceVersion": 6,
"trailTextureName": "trail",
"trailPreviewUrl": "/images/trail.png",
"trailColorMode": "particle",
"trailColor": "#ffffff",
"trailColorGradient": [
{
"position": 0,
"color": "#ffffff"
},
{
"position": 1,
"color": "#ffffff"
}
],
"trailAlphaMode": "particle",
"trailAlpha": 1,
"trailAlphaCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"trailBoneCount": 3,
"trailLength": 100,
"trailWidth": 100,
"trailWidthMode": "particle",
"trailLifeLengthEnabled": false,
"trailLifeLengthCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"trailShapeEnabled": false,
"trailShapeCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"trailGridRows": 4,
"trailGridCols": 4,
"collision": false,
"collisionColliderIds": [],
"pathFollow": false,
"emitterFollow": false,
"emitterFollowMode": "none",
"emitterFollowPathId": 0,
"emitterFollowSpineId": 0,
"emitterFollowBoneName": "",
"emitterFollowBoneOffsetX": 0,
"emitterFollowBoneOffsetY": 0,
"emitterFollowBoneRotation": 0,
"emitterFollowBoneScaleX": 1,
"emitterFollowBoneScaleY": 1,
"emitterAngleMode": "fixed",
"emitterFollowCurve": [
{
"x": 0,
"y": 0
},
{
"x": 1,
"y": 1
}
],
"emitterFollowDuration": 2,
"emitterFollowSpace": "world",
"emitterFollowDirection": "forward",
"emitterFollowOffset": 0,
"showShape": false,
"showForceFieldShape": true,
"vortex": false,
"vortexStrength": 10,
"vortexRadius": 100,
"vortexCenterX": 0,
"vortexCenterY": 0,
"vortexFalloff": "linear",
"showVortexShape": true,
"showAttractionShape": true
}
}
],
"colliders": [],
"paths": [],
"spines": []
}
}
+530
View File
@@ -0,0 +1,530 @@
{
"format": "SpineParticle.EditorConfig",
"version": 1,
"savedAt": "2026-09-22T09:13:58.532Z",
"editor": {
"viewScale": 1.4049280000000024,
"viewX": 4.425329339374599,
"viewY": -0.7737096708491435
},
"settings": {
"backgroundX": 0,
"backgroundY": 0,
"backgroundOpacity": 1,
"backgroundImageName": "",
"backgroundImageData": "",
"showGrid": true,
"exportSettings": {
"imagesPath": "./images/",
"spineVersion": "4.2",
"keyframeCurve": "bezier",
"fps": 30,
"omitFps": false,
"integerFrameAlignment": true,
"bonePool": true,
"excludeEmptyAnimations": false,
"fileName": "SpineParticle.json"
}
},
"timeline": {
"fps": 30,
"loop": true,
"playbackStart": 0,
"playbackEnd": 90,
"animations": [
"animation"
]
},
"selection": {
"type": "particle",
"id": 1
},
"scene": {
"systems": [
{
"id": 1,
"visible": true,
"animation": "animation",
"config": {
"imageResources": [
{
"id": 1,
"textureName": "star",
"textureFolder": "",
"previewUrl": "/images/star.png",
"imageMode": "fixed",
"sequencePlayback": "loop-forward",
"sequenceFps": 30,
"sequenceFrames": [],
"weight": 100,
"locked": false,
"scale": 1,
"anchorX": 0.5,
"anchorY": 0.5,
"colorMode": "random",
"colorStart": "#ffffff",
"colorEnd": "#ff4d4d",
"colorGradient": [
{
"position": 0,
"color": "#ffffff"
},
{
"position": 1,
"color": "#ff4d4d"
},
{
"position": 0.5,
"color": "#00e1ff"
},
{
"position": 0.25,
"color": "#ffae00"
},
{
"position": 0.75,
"color": "#c800ff"
}
],
"blend": "add",
"independentAlpha": "off",
"alpha": 1,
"alphaCurveMode": "跟随导出",
"alphaCurve": [
{
"x": 0,
"y": 0
},
{
"x": 0.1,
"y": 1
},
{
"x": 0.9,
"y": 1
},
{
"x": 1,
"y": 0
}
]
}
],
"imageWeightVersion": 1,
"name": "lizi",
"mode": "burst",
"rate": 5,
"streamBehavior": "loop",
"loopDurationFrames": 120,
"generateLoopStartAnimation": false,
"loopStartUseCustomDuration": false,
"loopStartDurationFrames": 30,
"generateLoopEndAnimation": false,
"loopEndUseCustomDuration": false,
"loopEndDurationFrames": 30,
"burstCount": 50,
"burstLoop": false,
"delay": 0,
"duration": 1,
"shape": "circle",
"showShape": false,
"shapeRangeVersion": 1,
"innerRadius": 150,
"outerRadius": 150,
"innerRectW": 0,
"innerRectH": 0,
"outerRectW": 60,
"outerRectH": 40,
"spawnPathId": 0,
"spawnPathDistribution": "fixed",
"radius": 30,
"rectW": 60,
"rectH": 40,
"centerX": 0,
"centerY": 0,
"rootRotation": 0,
"rootScaleX": 1,
"rootScaleY": 1,
"emissionAngleMode": "radial",
"direction": -90,
"spread": 0,
"coneDirection": 90,
"coneAngle": 60,
"lifeMin": 3,
"lifeMax": 3,
"lifeMode": "fixed",
"lifeCurve": [
{
"x": 0,
"y": 0
},
{
"x": 1,
"y": 1
}
],
"speedMin": 0,
"speedMax": 0,
"speedMode": "fixed",
"speedCurve": [
{
"x": 0,
"y": 0
},
{
"x": 1,
"y": 1
}
],
"scaleMin": 0.2,
"scaleMax": 0.6,
"scaleMode": "random",
"scaleAxisMode": "uniform",
"scaleYMin": 0.3,
"scaleYMax": 0.8,
"scaleCurve": [
{
"x": 0,
"y": 0
},
{
"x": 1,
"y": 1
}
],
"scaleYCurve": [
{
"x": 0,
"y": 0
},
{
"x": 1,
"y": 1
}
],
"scaleEndRatio": 0.3,
"initialRotationMode": "random",
"initialRotationMin": 0,
"initialRotationMax": 360,
"initialRotationCurve": [
{
"x": 0,
"y": 0
},
{
"x": 1,
"y": 1
}
],
"alpha": 1,
"alphaEnd": 0,
"rotationSpeedMin": 360,
"rotationSpeedMax": 720,
"speedOverLifeEnabled": false,
"speedOverLifeMode": "fixed",
"speedOverLifeMin": 1,
"speedOverLifeMax": 1,
"speedOverLifeCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"scaleOverLifeEnabled": false,
"scaleOverLifeMode": "curve",
"scaleOverLifeAxisMode": "uniform",
"scaleOverLifeMin": 0,
"scaleOverLifeMax": 1,
"scaleYOverLifeMin": 0,
"scaleYOverLifeMax": 1,
"scaleOverLifeCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"scaleYOverLifeCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"rotationOverLifeEnabled": true,
"rotationOverLifeMode": "random",
"rotationOverLifeCurve": [
{
"x": 0,
"y": 0
},
{
"x": 1,
"y": 1
}
],
"gravity": 980,
"gravityMode": "fixed",
"gravityMin": 980,
"gravityMax": 980,
"gravityDirection": -90,
"gravityCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"damping": 0.6,
"seed": 457291,
"colorStart": "#ffffff",
"colorEnd": "#ff4d4d",
"colorOverLife": false,
"blend": "add",
"alphaMode": "curve",
"curveMode": "线性",
"alphaCurve": [
{
"x": 0,
"y": 0
},
{
"x": 0.1,
"y": 1
},
{
"x": 0.91,
"y": 1
},
{
"x": 1,
"y": 0
}
],
"textureName": "star",
"textureFolder": "",
"alphaScale": 1,
"anchorX": 0.5,
"anchorY": 0.5,
"independentAlpha": "off",
"offsetX": 0,
"offsetY": 0,
"noise": true,
"noiseAmt": 10,
"noiseRange": 100,
"noiseSpeed": 1,
"useGravity": false,
"wind": false,
"windX": 0,
"windY": 0,
"windMode": "fixed",
"windMin": 100,
"windMax": 100,
"windDirection": 0,
"windCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"forceField": true,
"forceStrength": 20,
"forceRadius": 300,
"forceCenterX": 0,
"forceCenterY": 0,
"forceFalloff": "constant",
"vortex": true,
"vortexStrength": 10,
"vortexRadius": 300,
"vortexCenterX": 0,
"vortexCenterY": 0,
"vortexFalloff": "constant",
"attraction": false,
"attractionCenterX": 200,
"attractionCenterY": 0,
"attractionRadius": 20,
"attractionDuration": 0.5,
"attractionDelay": 0.1,
"attractionDelayMode": "particle",
"attractionPath": "curve",
"trail": true,
"trailConfigVersion": 3,
"trailResources": [
{
"id": 1,
"textureName": "trail",
"previewUrl": "/images/trail.png",
"weight": 100,
"locked": false,
"rotation": 0,
"colorMode": "particle",
"color": "#ffffff",
"colorGradient": [
{
"position": 0,
"color": "#ffffff"
},
{
"position": 1,
"color": "#ffffff"
}
],
"blend": "normal",
"alphaMode": "particle",
"alpha": 1,
"alphaCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"boneCount": 6,
"trailRatio": 100,
"lengthMode": "fixed",
"length": 100,
"lengthMin": 100,
"lengthMax": 100,
"widthSizeMode": "fixed",
"width": 10,
"widthMin": 100,
"widthMax": 100,
"widthMode": "particle",
"lifeLengthEnabled": false,
"lifeLengthCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"shapeEnabled": false,
"shapeCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
]
}
],
"trailResourceVersion": 6,
"trailTextureName": "trail",
"trailPreviewUrl": "/images/trail.png",
"trailColorMode": "particle",
"trailColor": "#ffffff",
"trailColorGradient": [
{
"position": 0,
"color": "#ffffff"
},
{
"position": 1,
"color": "#ffffff"
}
],
"trailAlphaMode": "particle",
"trailAlpha": 1,
"trailAlphaCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"trailBoneCount": 3,
"trailLength": 100,
"trailWidth": 100,
"trailWidthMode": "particle",
"trailLifeLengthEnabled": false,
"trailLifeLengthCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"trailShapeEnabled": false,
"trailShapeCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"trailGridRows": 2,
"trailGridCols": 12,
"collision": false,
"collisionColliderIds": [],
"pathFollow": false,
"emitterFollow": false,
"emitterFollowMode": "none",
"emitterFollowPathId": 0,
"emitterFollowSpineId": 0,
"emitterFollowBoneName": "",
"emitterFollowBoneOffsetX": 0,
"emitterFollowBoneOffsetY": 0,
"emitterFollowBoneRotation": 0,
"emitterFollowBoneScaleX": 1,
"emitterFollowBoneScaleY": 1,
"emitterAngleMode": "fixed",
"emitterFollowCurve": [
{
"x": 0,
"y": 0
},
{
"x": 1,
"y": 1
}
],
"emitterFollowDuration": 2,
"emitterFollowSpace": "world",
"emitterFollowDirection": "forward",
"emitterFollowOffset": 0,
"showForceFieldShape": false,
"showVortexShape": false,
"showAttractionShape": true
}
}
],
"colliders": [],
"paths": [],
"spines": []
}
}
File renamed without changes.
+1495
View File
File diff suppressed because it is too large. Load diff
+1542
View File
File diff suppressed because it is too large. Load diff
+5 -5
View File
@@ -1,11 +1,11 @@
{
"format": "SpineParticle.EditorConfig",
"version": 1,
"savedAt": "2026-09-14T09:27:43.502Z",
"savedAt": "2026-09-22T09:10:07.796Z",
"editor": {
"viewScale": 0.25667509294538904,
"viewX": -108.03375430502649,
"viewY": 58.10811303956338
"viewScale": 0.5066311211773208,
"viewX": -21.45847112068003,
"viewY": 229.1173536037184
},
"settings": {
"backgroundX": 0,
@@ -462,7 +462,7 @@
"depth": 7
}
],
"assetVersion": 5,
"assetVersion": 6,
"status": "ready",
"error": ""
}
+92 -6
View File
@@ -1,14 +1,100 @@
[
{
"name": "单个烟花",
"file": "单个烟花.json"
"file": "1.粒子扫过.json",
"name": {
"zh-CN": "1.粒子扫过",
"zh-TW": "1.粒子扫过",
"en": "1.粒子扫过",
"ja": "1.粒子扫过",
"ko": "1.粒子扫过",
"fr": "1.粒子扫过",
"de": "1.粒子扫过",
"pt-BR": "1.粒子扫过",
"es": "1.粒子扫过"
}
},
{
"name": "雷电",
"file": "雷电.json"
"file": "2.长条方块.json",
"name": {
"zh-CN": "2.长条方块",
"zh-TW": "2.长条方块",
"en": "2.长条方块",
"ja": "2.长条方块",
"ko": "2.长条方块",
"fr": "2.长条方块",
"de": "2.长条方块",
"pt-BR": "2.长条方块",
"es": "2.长条方块"
}
},
{
"name": "粒子-序列帧-拖尾-碰撞-路径-spine",
"file": "粒子-序列帧-拖尾-碰撞-路径-spine.json"
"file": "3.力场拖尾.json",
"name": {
"zh-CN": "3.力场拖尾",
"zh-TW": "3.力场拖尾",
"en": "3.力场拖尾",
"ja": "3.力场拖尾",
"ko": "3.力场拖尾",
"fr": "3.力场拖尾",
"de": "3.力场拖尾",
"pt-BR": "3.力场拖尾",
"es": "3.力场拖尾"
}
},
{
"file": "4.雷电序列帧.json",
"name": {
"zh-CN": "4.雷电序列帧",
"zh-TW": "4.雷电序列帧",
"en": "4.雷电序列帧",
"ja": "4.雷电序列帧",
"ko": "4.雷电序列帧",
"fr": "4.雷电序列帧",
"de": "4.雷电序列帧",
"pt-BR": "4.雷电序列帧",
"es": "4.雷电序列帧"
}
},
{
"file": "5.贴图轴点.json",
"name": {
"zh-CN": "5.贴图轴点",
"zh-TW": "5.贴图轴点",
"en": "5.贴图轴点",
"ja": "5.贴图轴点",
"ko": "5.贴图轴点",
"fr": "5.贴图轴点",
"de": "5.贴图轴点",
"pt-BR": "5.贴图轴点",
"es": "5.贴图轴点"
}
},
{
"file": "6.子发射器.json",
"name": {
"zh-CN": "6.子发射器",
"zh-TW": "6.子发射器",
"en": "6.子发射器",
"ja": "6.子发射器",
"ko": "6.子发射器",
"fr": "6.子发射器",
"de": "6.子发射器",
"pt-BR": "6.子发射器",
"es": "6.子发射器"
}
},
{
"file": "7.SpineBoy.json",
"name": {
"zh-CN": "7.SpineBoy",
"zh-TW": "7.SpineBoy",
"en": "7.SpineBoy",
"ja": "7.SpineBoy",
"ko": "7.SpineBoy",
"fr": "7.SpineBoy",
"de": "7.SpineBoy",
"pt-BR": "7.SpineBoy",
"es": "7.SpineBoy"
}
}
]
-571
View File
@@ -1,571 +0,0 @@
{
"format": "SpineParticle.EditorConfig",
"version": 1,
"savedAt": "2026-09-02T10:09:10.044Z",
"editor": {
"viewScale": 1,
"viewX": 38.17833227040819,
"viewY": 0.2901785714285552
},
"settings": {
"backgroundX": 0,
"backgroundY": 0,
"backgroundOpacity": 1,
"backgroundImageName": "",
"backgroundImageData": "",
"showGrid": true,
"exportSettings": {
"imagesPath": "./images/",
"spineVersion": "4.2",
"keyframeCurve": "linear",
"fps": 30,
"omitFps": false,
"integerFrameAlignment": true,
"bonePool": true,
"excludeEmptyAnimations": false,
"fileName": "SpineParticle.json"
}
},
"timeline": {
"fps": 30,
"loop": true,
"animations": [
"animation"
]
},
"selection": {
"type": "particle",
"id": 2
},
"scene": {
"systems": [
{
"id": 2,
"visible": true,
"animation": "animation",
"config": {
"imageResources": [
{
"id": 1,
"textureName": "star",
"textureFolder": "",
"previewUrl": "/images/star.png",
"imageMode": "sequence",
"sequencePlayback": "once-hide",
"sequenceFps": 30,
"sequenceFrames": [
{
"name": "fg_c_00.png",
"previewUrl": "data:image/png;base64,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 truncated
},
{
"name": "fg_c_01.png",
"previewUrl": "data:image/png;base64,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 truncated
},
{
"name": "fg_c_02.png",
"previewUrl": "data:image/png;base64,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 truncated
},
{
"name": "fg_c_03.png",
"previewUrl": "data:image/png;base64,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 truncated
},
{
"name": "fg_c_04.png",
"previewUrl": "data:image/png;base64,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 truncated
},
{
"name": "fg_c_05.png",
"previewUrl": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6CAYAAACI7Fo9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAgAElEQVR4nO3d569tX1X/8Xu/DazYuz9777333nvvvWJXrFhQxK6IIAKCICIiVbFEUNGoWGJMjM8Mmhj/ABOf719eO77JYGXvfc65hXvuvXMkK7utMtfa8zP6GPPKlUWLFi1atGjRokWLFi1atGjRokWLFi1atGjRokWLFi1atGjRokWLFi1atGjRokWLFi1atGjRokWLFi1atGjRokWLFi1atGjRokWLFi1atGjRokWLFi1atGjRokWLFi1atGjRokWLFi1atGjRokWLFi1atGjRokWLFi1atGjRokWLFi1atGjRokWLFi1atGjRokWLFi1atGjRokWLFi1atGjRokWLFi1atGjRokWLFi1atGjRokWLFi1atGjRokWLFi1atGjRokWLFi1atGjRokWL7nzare30M7h69erJbT2/KzfiGSxaQL+1zGgB/ZXynBfdZFoSaQH9MsyBRTeZbvUffGkl9z333LPfzpLo7Xdo31t9T7fRtugm020HwFfGdgq8F933Vj+/22RbdJPpVv/BlwroE7TXui2n3ZUF9EtIu7sd6Fug3nvvva+wnQXsQ/sssF9ZEv2S0R0P5PMAfQtu23333bffDv12bFuAv7JU90tKlx7oN0KdPksib8F9ke28GsCy3a+cmgeLFtBvLtAPgff+++9/+XZRoF8E7MtZd2UBfUn0V45EPwXy8wD9IlJ9SfYrS6LfLar7RR1jZznLzmM3H7O/t+B+4IEHXr7N7+zzoAc9aL+92qu92u7BD37w/l5e5VVe5RX2PUvCH5LiZ5kut9p0utnHX1mq+90F9GOAPgvkF5W2p1T1CfS2V33VV93/9uqv/ur744Eb4H0P8N4H9vOo8gvoVxbQ70agn+Uguyiwz7NtVfMt0JPeAdo+r/3ar70Hu8/28dn3h8B+iNEck+pLol/xHBbdbUA/r5p9PdshFb3vgRZ4SW6gBm7v3/RN33T3Pu/zPrs3e7M3273Ga7zG7rVe67X2x/jtFNjPUuEX0K8soN9NQD8G8FMgvdZtSuzt90AbwAGa5H6DN3iD3bu8y7vsvumbvmn3ER/xEbu3eIu32D3kIQ/ZveZrvubeZj+kxh+y20953y+rjX6925XzjWPRnQ70s9TzUyC91g0oD21JcQAHZFL7dV/3dfdSnDR/xCMesfuqr/qqPegxgNd5ndfZM4RTYD9LhV9Av7KAfjcCfauqXwSoh7ZjxwB1wLZNVR3IgRjIX+/1Xm+vtr/f+73f7gd+4Ad23//93797j/d4j90bv/Eb7xkBphDYc9RNxrRV48+Kqy+Jvuhm0G0H9IuA/JTkbgPQJLLX7G8gf/3Xf/09oN/8zd9890Ef9EG7b/zGb9w98pGP3Ev3t3/7t9/vR313TECfUv0Q0C8q1ZfqvuhG0Csd5Iccb6fCXIBDYgagnGPeA1jA7Pvt787n92LfAAmcfm9/35HiNu+p5QDONifN2eQf8AEfsFfbf/EXf3H34R/+4bu3fuu33r3RG73RniF0/TSDCfhD9vpFMuVuNiO42Tb51fONd9HdDPQk45S2VGpABMpCXqnQgXgyhpxrvbdv56CWO0/n8F3XeJM3eZM9kIH8nd/5nXef9mmftvuO7/iO3eMe97jdx37sx+7e4R3eYf87qW//6Zg75Im/VUC/2c62qwvotwVdCqAH9kOx7OxmQAJGwHrDN3zDvbQFVJv3JGv2stfi3Ulvn1O1bTnTAnvv7eOVA872ru/6rruP+ZiP2dvmpPkznvGM3Wd8xmfs7XTSHtg7btrqWxX+vB74VzbQrzeF+OoZY1oS/XLQpQT6tMVTzwEzkLOZ3+qt3mr/+v/+3//bv5LA9kkdB97eO18Adi7nYGO/7du+7R6sjuv82ebOSZqzzb/8y79899SnPnX33Oc+d/eHf/iHuy/5ki/ZO+f87roYTVI9Ff4Y0M+S6rcb0O854z4W0C8HXTqgz4SVnGXAE8BJWSB9t3d7t/3r27zN27wclECXVAdcx3a+JLjtvd/7vXdf9EVftPvar/3a3Tu90zvtgZq2kIaAgWAmH/iBH7jfD8hf8pKX7P7gD/5g/5nNHqPIVs8MSH3fxuoPSfXrBfr1bjcK6Pec08F4ZG4supuAfigzrZg24AG113d/93fffeRHfuTugz/4g3fv+77vuwekze+p4kn3KeG9Arrjvvu7v3v32Mc+du9Ye8u3fMuXS3xgB3TMw/cYyud93uftnvSkJ+3+4i/+YvfMZz5z9+3f/u2793//99+93du93R7omNAE+lZ9P5Q1133fbKCfBcyLFgmdp1Lv6gL6paNLCfQZ3wZMICSxAYsT7NM//dN3P/zDP7z7yZ/8yd1XfuVX7tVo0tXvQJfDLdW/LLYcbTSBL/uyL9v9+q//+h7EwFzMHMjztgM7R9zHfdzH7X78x3989yd/8ie73/qt39o9/OEP3wPdNWkRrjlV91NA30r12x3o996Y7jqL7magAwwAAhDgASiV+Yd+6Id2f/d3f7f7r//6r90v/MIv7D7lUz5lzwCmRHdcMfKceQCcp/yjPuqjdj/zMz+z+7qv+7o9aHPuBXThNdfkdKM98Li/8IUv3D35yU/e/dzP/dx+HK5XGI4GcRbQD6nvdwrQ7z0n2BfQ71Kgz9DaVnW3lWsOdID1oR/6oXu1+0UvetHuf/7nf/ZOss/8zM/cq/CkK8kPyEAH8DNzbXrXJb18xVd8xZ5RyF8nvTEH0tl+fAGuK17OTqc5vOAFL9j99m//9u5nf/Zndx/90R+91yBiHAF9mzwzM/RKoDlmn58AwlHwnwXc89jVp5KWusaxMOi916nSL4m+gP5y+xoAAZ0dTsJ+1md91l6VfvrTn7571rOetZfK1O/3eq/3ernnvBj7lLLlr3sF0k/+5E/e/fzP//zeMYdBuEYqfFlxrsk04Glnnwd0IbdMhQn0rUQ/VrN+Xq/7WRL+RkvnbWai8QfoCfjAfu8C+m1Bt1yiHwutJdFJyMJdnGPARRp/0id90h58v/Zrv7Z71KMetZewvOnAWkJMobmk7EyyIYnt/4M/+IO77/3e792r/kBd+C1zwXUxkc/+7M/e2/RsdNdjt9MwiuEfyns/5ow75XU/BvZjAD8PWK+nXr/svsa9Tem97wLttJZEX0B/BbDPnHTgJGEBE/B43YGd9P6QD/mQvfoN7NR5oTKVZTnGJtjZ/L7LO+6cbP4v+IIv2P3ET/zEy73vgAq89iHRXdf1Pv7jP35fvcZGl+/+CZ/wCXvGUGbc1kw4FGK7SOnqedT0LbM8BNiLgPpQCrJz+64Mw1m4c/85Gm0soF8OuhQS/ZhUt5X6Wspq8XQebx5xtvl3fud37rPWqOIy2YDPcQHelnNvps+yw6nlnHuSYgC3WLtrZbNT6z/swz5sH1Z7ylOespfoPP8k+iGgb8F+SrKfBYazbOqzgHsj6vX7H2aFXoz4/jNq7xfQLwfdcqBv7b4t0Jtks6IM+EhbzjdSmdf8+77v+/ZqOKAD5nTGeS1bbYLR+TjbFKt8z/d8z14bcF77k+rO4TOGwMvOIfe0pz1tb9d//ud//u4d3/EdXwHoOePaAvy2Xn1KwrMAcZbD7CyJfBFQH6oQnOPuc989sOnUc6wcd6nut54uDdC3IbYpNSo6Sdq2ASrpDpTCZcD6qZ/6qXvbG0BT2atKq/qt7LWAzASgFUh3db6u5ZXqbnvP93zPvZ3OGcdTzz/AVMj5l5OvLU0i8M/U2FO571tQnGV/nwXwa23GMZONevUcaFI29/3AKDw6S1NZNvoC+kn1fZtAM5tDFGM3AQGU3aw5hOoykto+zhXQnCfwdY4cfV/zNV+z96QXZssJWFosM+ETP/ET9+E8Eh3Qk+hboB96P8NuWwfXKbCf5WQ7BvLrqd+f9frGb6M9cYIyjzxnz+M1/69g6DwmyQL6XQT0Q97jY6rorEef3WBKgJkqcqo2cH/xF3/xPrmFOg+gU4J3roBvgqYdUM2/+qu/eq/6s98xD+csfMZEoDXIipOVx4nHUz+97pW6dk7v/ZZ2MIteZkz9EDDOK8E900p5Y4wxRO+dw/1OP0W/efV75tFsZV3OQSm+cgloTD/90z+9zyrE5B7ykIeczBNYQL88dGmAvo3PHrLXt2Cv7jxQAR21/XM/93P3zjIqZqGy7OVCRjEJ52SDAy0GQX33GZPwm3MCOibCIfcjP/Ije687u37a6LP1lFfHOU/FNnn7k+zGvY1Dn+VsO9bFNkbYdz0n91k4sWvFFGIMxtRvmTM9X2MWcVCWq0yXDwQjJdkzjR68gH5b0KUD+jGwb4tdAnze9dJlbUJvwm5i7cA+bfUm9XTSVaqKQVDfed8BP2luE9Yj9Tn9fumXfmn30Ic+dB9fN+FjNKn5XnnkaRXUXMdhFMa2rW47Foc+BfBpW8+ed7NrTgxl3jutYpo/ec3LMeh5GicGhZGR3u75YQ972D4DMS2m6sAHn5EQtFT3y0G3HOjHJNgh6bWV7sXZm+R1ZaV2y39XTkr6mJR1l2nfJnpSiSTjdQd21XHUdA64QnqkM2A7p1CeJBvnBoikdYzG/jL4OAa/7du+bV84Q9PwfeBo/Icq2k452g5pONO0KRRpyz9QWLF6/Jp4JNFdy/HlDQAyzeabv/mb96FHTDNHZeHJGMiDljPutqBLAfRjNul5nExJxSZdoTjJL7zkHGjUz0pIZ417E9y4THBSl5ONFJZTz14HXL8BAe1ASylVc6ScctcJ9Nnxpqo3jMExmIfvp0RPfT+UeHIK5Fvn5KE21fkLjBuDqdinCj6/x/CmX4HExqA0whSJMHYakvOUWpyP4VWGuXCqtfVyxt16ujRAPwb2s8JFjkvddH6Tz3u/AZu8eNKZKp0DLns9Line truncated
},
{
"name": "fg_c_06.png",
"previewUrl": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6CAYAAACI7Fo9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAgAElEQVR4nO2d148lV/W2e2bssQ02OYcfyWSTc845RwMmGpOTSTY5BxtHsME4EA2YbDAYhEEgBCJLcAPcIG6Q4I5/oT49pXlGL/vbdULP9PTp7rWk0kkVdtXZ78pr7bW1oqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotWlYadtu3btmrlt9vh2+Fa0QTTstK2Avvn/wVoB/ZDTZv+xBfQVeCYrtBVtEG32H7tyQD/QbbPvb4tvRRtEw07bCuib/x+sFdAPOW32H1tAX4FnskJb0QbRZv+xBfQVeCYrtBVtEA07fVtWld+9e/f/bK19Xjb7WgF9BWnTgbYqIG8BvOjWYwTlnFtb739SVEBfDZDv2bNn3KbAPiXpa1sroJdEXw0pLoiX2RaV9gX0tQJ6AX19QF3vNgvghx122MLbIoAvm32tVPcVoC0naQ4myHsAP/zww2dus8A+T60vyb5WNnoB/dACfUqKzwN6D/DLgH2zGeWKb0UbRDtOoreAbCX03r17Z26Lgr2AvlZAXyHatsCeUtHb71opftRRR42/H3HEEePnI488cjjmmGP2vwfsV7va1fa/99XzJvBbid67n81+viu2FW0QbSmg92zeZUAu+KbsckGcQOfV72ACV7/61ceN7wU676ds93lj3uznu2Jb0QbRlgL5IkCfBfIEYII8VXPAzO+8CnIk+jWucY3hNre5zXDDG95wuOY1r7kf4Oznvhzfgn3euDf7Ga/YVrRBtKVAvp7EllkhswQ5QHXj+6OPPnqU3AAccB933HHD8ccfP9zhDncYP8MAALhqvEBv7ffywq8V0FeANhXA64l5rxfgCcBU1QU3YBWwbABcoN/sZjcbHvWoRw0f+9jHhoc85CHDLW95y/F7mEECvbX3WxV+K4TbDtTZuVYSfSVp5SfSejLXepK73XogVw1nE+io7Te+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 truncated
},
{
"name": "fg_c_07.png",
"previewUrl": "data:image/png;base64,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 truncated
},
{
"name": "fg_c_08.png",
"previewUrl": "data:image/png;base64,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 truncated
},
{
"name": "fg_c_09.png",
"previewUrl": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6CAYAAACI7Fo9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAgAElEQVR4nO2d95NsVdWG5yaCImLCBJhzxKxgzqgYMCCiIiKgiAFQFJAcVKAUDIAktTD9YllaptKyrMIy/Oo/dL56Tt3nfq+7zunTPTP3Tk/PWlWnuud090mz373WelfYa2slJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlyy1dbfUMlnAMlGyydDt127Vr10Hdtvr+tvlWssnS7dStgL71/4O1Avohk63+hxbQl+BZLOFWssmy1f/QAvoSPIsl3Eo2Wbrtui3qIw993u7bvXv3urbyz9cK6EsuOxboQ9tmAb3IuLXS6EsmOwLo6wH5nj17Zm7zgL0Av7be/29JAX0xoI8BeiMgL7Af9Im8pIA+v5aeBeYpgO/du3fmVoBfK6BvI1lZ031R37vV1osAfciUL6JurTT6EsnKA30M0FOm+r59+2Zu85jyRdatlem+JLLSQJ+ltae0+RTQF9HqFYJbW/T/W7IqQN9oCuoixx8CPPuHNPdhhx3WHX744d0RRxxx4POHPvShB97zGd9hE/AJev+eAvlG72/Ft5JNlm0L9I2a7gl0QZsg5/2RRx7ZPeQhD+ke/vCH9+DlPZ/nb1rtPg/QN2MiW/GtZJNlZYE+Rbjxtya6GpoNkANwtqOPProH9zHHHNN/9rCHPezARKBmT62e27xx9gL6WgH9EMiOAfoQeQYgE+SAF4BjqqPFATp/H3vssd2jH/3o7pGPfGQPcj6bAvsiSTWl0ddKoxfQNwb0WWGzNNfV1IAczf2oRz2q1+SPf/zjuxe96EXdySef3D3pSU/qjjrqqB7wTACzwL6eOHuZ7mtlupdGnzbN59Hgs0AOeAE5GhstfsIJJ3RvetObug9+8IPdhRde2L3kJS/pNTufY9IPgX0s/LYo2JfATy4ffYVk25ruG02ASZALdMCLuf6IRzyie+ITn9i96lWv6i666KLuS1/6Unfrrbd2r3vd6w5odTS/YJ8H6C3YC+hrs8ZHSQF984EOyDXbBfpTn/rU7j3veU93++23d1//+te7O+64o3vjG9/YPfvZzz4AdLYxoE/F2QvoawX0VdToi2rpMWAYEhsCTPtbXjm3gOZ3mN28aqqrlXkFwACd7zz96U/vXv3qV3ff/va3++0b3/hG94EPfKDfj4+OiZ9Az3MM+epTAF/0eS3D/2vXBraJ85fsFKCnVpwFnATPkCZH07JfDc61CE4BLtjV6JBwz3jGM7rXvva13U033dRr9auuuqr76Ec/2gMdjT8GdM4zxcAX0HcV0A+xLC3QE9AJ9kx2GSK5WqADXM4PANHE/BYgp1+eWh0AA+SnPOUpPdN+xRVXdD/60Y+6a6+9tjvnnHO6Zz7zmT0hl0CXkJti4BcBe2n0kh0BdP6WHc9Ck7HU0xbkfgdzXFMdbfzc5z63e9zjHncgKQZwC1hZdyaEJzzhCd3LX/7y7vzzz+/uuuuu7uqrr+4uuOCC7nnPe17/GRMIxxboQ+z7FNhn5cAX0Et2BNABh+AT7AJWX3iM9JJsM0PNDDeA++lPf7p71rOe1Wt1gZpa3Tg54bUXvvCF3Yc+9KHutttu6y6//PIe6C94wQt6Rl6g8zuBbupsS8pNxdUPRubcwfaxd5WPvq1kaYGuf80myPWHOd6QmZwmvtqf7wJctPYrX/nK7sorr+xj44AVsEvKqdV5Zf9jH/vYnmF/xzve0X3rW9/qmfdzzz23BzqfJdBnafWDBfYCeslKAD03wPOYxzymT2DBP3bfVAoqwOPcgBIAP+c5z+k+//nPd2effXZPtnEsAZohMxNmCLG94Q1v6K677rp+gsBHf/GLX9xfC9/BzBfobfLMPOG2jaTJFtBLVgLomusABI2Mb0y4C7DOk2vOMTT7Jd3Q4qeeemqvnTkemllSLoGun37cccf1zPs111zTXX/99b1Gf8UrXtH/bh6gD/nrmwX2AnrJtgL6GGvOZ7wCHED10pe+tPvMZz7TnX766T2ZRi66Zny+R3tnKakVaWwAk+Ocd9553Vve8pbuaU972gEyTq2vRgfoTAyY+1/4whd6Mo7foeHV6EPme1oaY4CfFVt331YnHE25Fruj+s9J2QmoPf46Jq6SnQL0rBEHQIS7SFj51Kc+1b3tbW/rgSihpua3WUTL0ifDjt992mmndWeddVYPdCvSBCuTAccFxBJyH//4x/s4Ohod/56JpgV6gjzJwimN3uYBrJecOxRAn8pd2D3HBFFA3xpZWqCrFQUNoEIbf+xjH+s++9nP9mEy9gFUNSB/O7AS6LLqHAuQksOOljbUljXoFrVIyPGd9773vT0hx2/e/e539xOEpvtQLH3MfB8D/XrAsVGgTm1DLkYb2dgT1z60r4C+PLK0QNccNIMNIAE8klg+8YlP9BVlmNAAko1zMNBs+5S15mpsm0dAspHl9uY3v7kvQxWwFqqgpUma4TOA/va3v70PsX3lK1/prQGsghbobd68E0f67zkZtIBvn8HBBvoUkGcBXOvpsP0RkdzvpFtAXy5ZaqDrB2aVGH7za17zmp4Bx4w21JXprWpO9ulHsl8zHpPcY8DkA2oBzm8EMBMJSTZUrX3zm9/sq9gg83AjOKdkXMbR9fk5FhvfYWt9+bbvXAuojQJ9vUCeBe70yQ8byQDUGimgL5csLdDVFvyW94BH0D/5yU/u3vWud3Vf/OIXex+aAQcoefX7su0ZalPjAmySZgi1ES6DzNPEt4MMgOR7MO8w7ZSr4qOfcsop3fHHH/8/QFdry9hbGIOlwTHkE/z+UBHMFBO/HtN6kb70U8dJgGduw+Ej91FAXy5ZWqBrevtbAOJgIv6N+XzmmWf2CS2kpLIPoAl0wa1lkL3eABwABrRsmOiWqQpYNDBgZRIgSebDH/5wzw+8853v7CealnE3Tx5AA2yuB8uBY3N9RgrM0hsKDx5KoM87EQyBXHfq6P0cCfec/5+sLiwybjlkaYHOb9TIfE+TnPcMMDQ4YP/IRz7Sm9YJOAYi39NETqCruQEigIVRx3xPDW2OvCmykG+vf/3ru/e97329v67pLtAzRCfIATean3PwfRpWAHo+53ttyuwyAr3NMswa/kfvv0eeHa9MiqYdF9CXT5YW6O3Aa5lrgIVZjJ8OQYYvbYcYjpvxXY+bMXUGK4OUuDxJMQzWNtsOTYVW5rOTTjqpJ+MAO1l1nBugt51p4AywFgD485///J7hJ1pA1Ru/Y38m26TZm6z8vMAeAqlA89qcLJMwa7W0IPV58T9LnkO3SYvl+OOP760hsgzJScBiyec3NmFVeK2APhPoLdglziDnXvayl/WgYgAmiTdkhjqo0dQAmGw7fHBNf01wzWvOA3CZUMioY2I48cQTe1DzfU1+k2wY8IAAYGPq33zzzX0MHhcDy0ATXsJvqFlFC/RFAJ4TXNuzPiMAQ+G+PAbX53U4ObKfe+TeTjvttB7kuE88P/a3E0YBfXlkaTX6lGZP/xuTGMACeDQq4MzYbmqqBADgBOAQcvxOX1O2XFOVCYFjk2SDj07Ije+2QAfAXAuWAp1j6Urzz3/+s/vjH//YZ/VBAAJ0q9/GgL6o9s5NsBlOdHJr4/tZBeix0v/2M3MLuFbuj+dAaPKss87qwY7FwvPxN/5fCujLJUsP9LEBngQdgxCwvvWtb+01u7H0BHZqSQeiPjKgBLxqWkGhzw8fgJbm+Jj5xOGngM51kNjzwAMP9I0rzjjjjJ5TAOTWsw8BfVFwt6m2XrsWT7bNymjEUBfb7IYrL2ICEfeP+wIpiSY/6aST+okLyyZzCDxnAX25ZFsAfWjQ63OrSRhwgJVN31lwp9/q71LzYYqS0+4iDfqYggEAA05Ceu9///t7Fj5N9yEfHQIOMEAWovnQhPjnHEf2fZZGn1dzZ6guE3YSvG29veHDWcU41gYwyQFouRDSj7n/44477n869TiRtP/H8tGXQ5YW6FOmPAOX4wpI9gEeSDm0KaBl8KVW9xgOZtl4BiyD157tqfX4vuQTTSgwWenvDliTjMtwHOa5YGfiQZPzN/vZMqaerHv6zC2wW+3dArvNyGuXl5J7aJtttKm7bkxCWCf430xuZCJizWCtqOUfsv/3vvKsTD8uoC+XLD3Qx7Q8g1F22IHJK4OTcBvEFxrWY7UMfGZwASzCX5jk+uZqQL7DBIBmo90zYCdJh30u2ZRdZPX7MdG5FiYIQM7vYfDZ1OYCsg1htfnxrXme0YOhdFuvx5Ah18X5sSi4rizcEaRqe1l1rpkJDSuGSAMcCNaISUGHzyjcKdN9+WRbAH0I7ByTAccxfO9Ao9YcMGJGZzjJ33leQ0cMdjQVg1nfWyuAjQFu5RtxdAAAcAR6to62uSTnBjBoeIDPPt7r0wqw1OBq6gT6mA8+C+Bu1gFwfur4yQUg9ZcwHxOOnISTFNcrx0A5LpECXu186wTlRLtvgMgz16E0+nLJIQX2UDx1Kn4+5p+2lWLGfNVMaCS0NIDkGFyT3/MaE1gMZAY4Az3z4rk2U1oBBqSfXWYshOF8nCObTfL93NSuqcnHatYT4Hm/6UtzXYJP8s1jA1hJRK4ZFwKuwJp6+AKsHiMNvMqqY6qbMch96mqY5OP/Y+9ESu1Urv6sbatBsYqypUBvNfZYltaQvzpUXJFgR2PhH6Pd0WhqmdQ6ms1cL4MYYOjbC3Q+k9nHDKd6jpASk0jG2gW8mjWLWnIJLine truncated
},
{
"name": "fg_c_10.png",
"previewUrl": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6CAYAAACI7Fo9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAgAElEQVR4nO2d569tVdX/z7n3YsVesOBjVxR7Fxt2sSEgFhApigqCqBRRMBasGERjCSGKERM0IUaNMSb4xhhNfKGJb3zhn+BfsZ58Vvjc3/c3n7nW3qfce/Y5e4xkZrfV9/yOPsbc2CgqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipabRpqbO8ZbG5uzo56rhs7eQZFBfTjA9SdjgL6RgF9hWhtJ2QBfe//g42S6AX0Avqeg62AfoBoWNdREn2lR9Eu09oCe6u/H+vj1dgooB9DWpsJtlVg7tT5VkDf2Mn/VVRA332gHwtPewF9o4C+QjSsu0Rvvz906NCWxrLH3ev732ejaJdpWJexSBpvFeCLAF9A3yigrxDtOQBXAeg94B4+fHh2bBXse33/+2wU7TIN6zKWBfkigC8CfAF9o4C+grTWQJ8D+ZEjR2bHVsG+1/e/z0bRLtNKAW8ncezthLsAZQteXk844YRx3O9+9xu3u//97z++PuxhDzv6XQv4kugbBfQVpgJ6I6kB+H3uc58RvA94wANGYD/kIQ8ZnxPvZQItgyiJvlFAX2FaC6DP2ect0AH5fe973/EVYCPNATrv+Q6QwwB6anyBfaNU9xWlAw/0Obu8tcUBMSBXigPyE088cXjUox41POlJTxoe/vCHjyDn+55UX8Ze38tnvo9G0boAfbfHVAitleaAHDAD6kc/+tHDc57znOElL3nJ8Na3vnV48pOfPDz4wQ8emUGrwu8k9FbOu40C+jGmtQD6MiDXNleKP/ShDx1OPfXU4bzzzhvHZZddNjzrWc8aHXIJ9GMF9hWQqiXRDxAdeKBPhdAS4A4AjDR/0IMeNEr0l7/85cOVV145fPSjHx2uu+664XnPe94o5dlGez3BvpM4ewF9o1T3AvrugnwO6A984ANH9fykk04aXvaylw0f+9jHhve9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 truncated
},
{
"name": "fg_c_11.png",
"previewUrl": "data:image/png;base64,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 truncated
},
{
"name": "fg_c_12.png",
"previewUrl": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6CAYAAACI7Fo9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAgAElEQVR4nO2daY90VfW3q+8bRBzBAUVxnnG6nRVxQlEBFRVFGQVUIuAQBgVRNEBUIhqCQ0iMMYKJMTG+Uom+970fwA9znlznuS/yY//3qaruru6q7l4rOanpjLv2b81r7dmsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqGg+DbUdrDHY2tqau637/mar2YpWTOv+Qw8dkA4p8PZ7K1oxrfsPPXBA3+627uc5oFvRimndf+jGbQX09f8Hs6KV07r/0I3bCujr/w9mRQX0TQNyqe6zAvoBoHVz7gMnsY8dOzZ3Kxt9VhJ9A2ntwCugr39MNnArWjGt+w8toG/AmGzgVrRiGg7btlt1nM9PecpTnjjfqaeeOr7y2ymnnDK+Hj9+fNza45a5/m7vf93jW0A/mLTuP3TjgM721Kc+9Umgdx9A37PLBf0qnHMF9BnjUFRA31ugK8X9zHuAz+sznvGM8RVge5zS3a2APlsFwy4qoO890AUt0vzpT3/6cM455wxnn3328LrXvW78zPetNPd9AX1WQN9AWruqvWmqO+cAyEjxZz/72cMLX/jC4f3vf//w7ne/e7jkkkuG5z73ucPTnva0JwHcay+rvu9mW/f47tNWtGJa9x+6cUDnM+r5aaedNjznOc8ZXvKSlwyf+tSnhgsuuGC44oorRsn+zGc+s4BeQD9QtHZgbhrQOYdqOBL9RS960fCZz3xmOO+888ZX1PhnPetZT1LXvfYyqntJ9FlJ9AL6+oFOCI0NqX7GGWeMEhyAv/3tbx8++tGPjhIeid4CPT30BfTZbv/HoqMm0QENYBKAbcza37SZW8Dn57TBUc2xw/3d956TDS87wP7KV74yXHPNNcMHPvCB4RWveMVw+umnP+k8Xl9tYF5a7KJU2SNqkw8F9L2ljQT2vEmeQG+P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 truncated
},
{
"name": "fg_c_13.png",
"previewUrl": "data:image/png;base64,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 truncated
},
{
"name": "fg_c_14.png",
"previewUrl": "data:image/png;base64,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 truncated
},
{
"name": "fg_c_15.png",
"previewUrl": "data:image/png;base64,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 truncated
},
{
"name": "fg_c_16.png",
"previewUrl": "data:image/png;base64,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 truncated
},
{
"name": "fg_c_17.png",
"previewUrl": "data:image/png;base64,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 truncated
},
{
"name": "fg_c_18.png",
"previewUrl": "data:image/png;base64,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 truncated
},
{
"name": "fg_c_19.png",
"previewUrl": "data:image/png;base64,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"
}
],
"weight": 100,
"locked": false,
"scale": 1,
"anchorX": 0.5,
"anchorY": 0.5,
"colorMode": "fixed",
"colorStart": "#ffffff",
"colorEnd": "#ff4d4d",
"colorGradient": [
{
"position": 0,
"color": "#ffffff"
},
{
"position": 1,
"color": "#ff4d4d"
}
],
"blend": "add",
"independentAlpha": "off",
"alpha": 1,
"alphaCurveMode": "跟随导出",
"alphaCurve": [
{
"x": 0,
"y": 0
},
{
"x": 0.1,
"y": 1
},
{
"x": 0.9,
"y": 1
},
{
"x": 1,
"y": 0
}
]
}
],
"imageWeightVersion": 1,
"name": "ParticleSystem1",
"mode": "burst",
"rate": 20,
"streamBehavior": "normal",
"loopDurationFrames": 30,
"generateLoopStartAnimation": false,
"generateLoopEndAnimation": false,
"burstCount": 1,
"burstLoop": false,
"delay": 0,
"duration": 1,
"shape": "point",
"radius": 30,
"rectW": 60,
"rectH": 40,
"centerX": 0,
"centerY": 0,
"rootRotation": 0,
"rootScaleX": 1,
"rootScaleY": 1,
"direction": 0,
"spread": 0,
"coneAngle": 60,
"lifeMin": 1,
"lifeMax": 1.8,
"lifeMode": "fixed",
"lifeCurve": [
{
"x": 0,
"y": 0
},
{
"x": 1,
"y": 1
}
],
"speedMin": 0,
"speedMax": 140,
"speedMode": "fixed",
"speedCurve": [
{
"x": 0,
"y": 0
},
{
"x": 1,
"y": 1
}
],
"scaleMin": 1,
"scaleMax": 0.8,
"scaleMode": "fixed",
"scaleAxisMode": "uniform",
"scaleYMin": 0.3,
"scaleYMax": 0.8,
"scaleCurve": [
{
"x": 0,
"y": 0
},
{
"x": 1,
"y": 1
}
],
"scaleYCurve": [
{
"x": 0,
"y": 0
},
{
"x": 1,
"y": 1
}
],
"scaleEndRatio": 0.3,
"initialRotationMode": "fixed",
"initialRotationMin": 0,
"initialRotationMax": 360,
"initialRotationCurve": [
{
"x": 0,
"y": 0
},
{
"x": 1,
"y": 1
}
],
"alpha": 0.9,
"alphaEnd": 0,
"rotationSpeedMin": -180,
"rotationSpeedMax": 180,
"speedOverLifeEnabled": false,
"speedOverLifeMode": "fixed",
"speedOverLifeMin": 1,
"speedOverLifeMax": 1,
"speedOverLifeCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"scaleOverLifeEnabled": false,
"scaleOverLifeMode": "curve",
"scaleOverLifeAxisMode": "uniform",
"scaleOverLifeMin": 0,
"scaleOverLifeMax": 1,
"scaleYOverLifeMin": 0,
"scaleYOverLifeMax": 1,
"scaleOverLifeCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"scaleYOverLifeCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"rotationOverLifeEnabled": false,
"rotationOverLifeMode": "random",
"rotationOverLifeCurve": [
{
"x": 0,
"y": 0
},
{
"x": 1,
"y": 1
}
],
"gravity": 980,
"gravityMode": "fixed",
"gravityMin": 980,
"gravityMax": 980,
"gravityDirection": -90,
"gravityCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"damping": 0,
"seed": 0,
"colorStart": "#ffffff",
"colorEnd": "#ff4d4d",
"colorOverLife": false,
"blend": "add",
"alphaMode": "curve",
"curveMode": "线性",
"alphaCurve": [
{
"x": 0,
"y": 0
},
{
"x": 0.2,
"y": 1
},
{
"x": 0.8,
"y": 1
},
{
"x": 1,
"y": 0
}
],
"textureName": "star",
"textureFolder": "",
"alphaScale": 1,
"anchorX": 0.5,
"anchorY": 0.5,
"independentAlpha": "off",
"offsetX": 0,
"offsetY": 0,
"noise": false,
"noiseAmt": 30,
"noiseRange": 100,
"noiseSpeed": 1,
"useGravity": false,
"wind": false,
"windX": 0,
"windY": 0,
"windMode": "fixed",
"windMin": 100,
"windMax": 100,
"windDirection": 0,
"windCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"forceField": false,
"forceStrength": 10,
"forceRadius": 100,
"forceCenterX": 0,
"forceCenterY": 0,
"forceFalloff": "linear",
"attraction": false,
"attractionCenterX": 200,
"attractionCenterY": 0,
"attractionRadius": 20,
"attractionDuration": 0.5,
"attractionDelay": 0.1,
"attractionDelayMode": "particle",
"attractionPath": "curve",
"trail": false,
"trailConfigVersion": 3,
"trailResources": [
{
"id": 1,
"textureName": "trail",
"previewUrl": "/images/trail.png",
"weight": 100,
"locked": false,
"rotation": 0,
"colorMode": "particle",
"color": "#ffffff",
"colorGradient": [
{
"position": 0,
"color": "#ffffff"
},
{
"position": 1,
"color": "#ffffff"
}
],
"blend": "normal",
"alphaMode": "particle",
"alpha": 1,
"alphaCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"boneCount": 3,
"trailRatio": 100,
"lengthMode": "fixed",
"length": 100,
"lengthMin": 100,
"lengthMax": 100,
"widthSizeMode": "fixed",
"width": 100,
"widthMin": 100,
"widthMax": 100,
"widthMode": "particle",
"lifeLengthEnabled": false,
"lifeLengthCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"shapeEnabled": false,
"shapeCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
]
}
],
"trailResourceVersion": 6,
"trailTextureName": "trail",
"trailPreviewUrl": "/images/trail.png",
"trailColorMode": "particle",
"trailColor": "#ffffff",
"trailColorGradient": [
{
"position": 0,
"color": "#ffffff"
},
{
"position": 1,
"color": "#ffffff"
}
],
"trailAlphaMode": "particle",
"trailAlpha": 1,
"trailAlphaCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"trailBoneCount": 3,
"trailLength": 100,
"trailWidth": 100,
"trailWidthMode": "particle",
"trailLifeLengthEnabled": false,
"trailLifeLengthCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"trailShapeEnabled": false,
"trailShapeCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"trailGridRows": 4,
"trailGridCols": 4,
"collision": false,
"pathFollow": false,
"emitterFollow": false,
"emitterFollowMode": "none",
"emitterFollowPathId": 0,
"emitterFollowSpineId": 0,
"emitterFollowBoneName": "",
"emitterFollowBoneOffsetX": 0,
"emitterFollowBoneOffsetY": 0,
"emitterFollowBoneRotation": 0,
"emitterFollowBoneScaleX": 1,
"emitterFollowBoneScaleY": 1,
"emitterAngleMode": "fixed",
"emitterFollowCurve": [
{
"x": 0,
"y": 0
},
{
"x": 1,
"y": 1
}
],
"emitterFollowDuration": 2,
"emitterFollowSpace": "world",
"emitterFollowDirection": "forward",
"emitterFollowOffset": 0
}
}
],
"colliders": [],
"paths": [],
"spines": []
}
}
File diff suppressed because it is too large. Load diff
+16
View File
@@ -0,0 +1,16 @@
{
"enabled": true,
"scrollDurationSeconds": 24,
"messages": {
"zh-CN": "2026-11-04更新:修正路径跟随导出效果。",
"zh-TW": "2026-11-04更新:修正路徑跟隨匯出效果。",
"en": "Updated 2026-11-04: fixed path-following in exports.",
"ja": "2026-11-04 更新:パス追従のエクスポート結果を修正しました。",
"ko": "2026-11-04 업데이트: 경로 추적 내보내기 결과를 수정했습니다.",
"ru": "Обновление от 04.11.2026: исправлен экспорт со следованием по пути.",
"fr": "Mise à jour du 04/11/2026 : correction du suivi de trajectoire lors de l’exportation.",
"de": "Update vom 04.11.2026: Der Export mit Pfadverfolgung wurde korrigiert.",
"pt-BR": "Atualização de 04/11/2026: corrigida a exportação com acompanhamento de trajetória.",
"es": "Actualización del 04/11/2026: corregida la exportación con seguimiento de trayectoria."
}
}
-1239
View File
File diff suppressed because it is too large. Load diff
+1
View File
@@ -0,0 +1 @@
const _0x232089=_0x56c4;(function(_0x1758a0,_0x18c8ff){const _0x273c74=_0x56c4,_0x17cd99=_0x1758a0();while(!![]){try{const _0x1f2630=-parseInt(_0x273c74(0x1495))/0x1+-parseInt(_0x273c74(0x53dc))/0x2*(parseInt(_0x273c74(0x35a5))/0x3)+parseInt(_0x273c74(0x4bbd))/0x4*(-parseInt(_0x273c74(0x99e))/0x5)+parseInt(_0x273c74(0x22a8))/0x6+-parseInt(_0x273c74(0x2af5))/0x7+-parseInt(_0x273c74(0x279c))/0x8+parseInt(_0x273c74(0x5120))/0x9;if(_0x1f2630===_0x18c8ff)break;else _0x17cd99['push'](_0x17cd99['shift']());}catch(_0x1428c4){_0x17cd99['push'](_0x17cd99['shift']());}}}(_0x4e85,0xe1874));var ks=Object[_0x232089(0x3ff5)+_0x232089(0x3612)],Cs=(_0x4c33a7,_0x21cab4,_0x4c0c85)=>_0x21cab4 in _0x4c33a7?ks(_0x4c33a7,_0x21cab4,{'enumerable':!0x0,'configurable':!0x0,'writable':!0x0,'value':_0x4c0c85}):_0x4c33a7[_0x21cab4]=_0x4c0c85,ke=(_0x1a32be,_0x1c1a32,_0xff1002)=>Cs(_0x1a32be,typeof _0x1c1a32!=_0x232089(0x16b4)?_0x1c1a32+'':_0x1c1a32,_0xff1002);import{c as _0x20796d,d as _0x59cbd7,u as _0x343082,o as _0x3bfd97,a as _0x3f2cf0,b as _0x323b63,e as _0x55b200,w as _0x4e81f2,f as _0x565f50,n as _0x28b114,g as _0x38be18,t as _0xe258d9,h as _0x7f985c,F as _0xdc2848,r as _0x1e58d6,i as _0x4cd87c,j as _0x39f553,k as _0x176438,l as _0x15f160,m as _0x2ae87f,p as _0x2caeca,q as _0x5b1d4b,s as _0x565f91,v as _0x520e25,T as _0x5b4d33,x as _0x205475,y as _0x3418b2,z as _0xdd80ee,S as _0x5e71bd,C as _0xeb512d,G as _0xb68fcd,A as _0x9686f9,B as _0x1d7cef,D as _0x41cffe,M as _0x275490,E as _0x971725,H as _0x306d98,I as _0x4c30c3,J as _0x4a4ed8,K as _0x6fb7a3,L as _0x5674e1,N as _0x41d1cf,O as _0x429cf5,P as _0x390327,Q as _0x5815e7,R as _0x38c71c,U as _0x3e8c24,V as _0x4af473,W as _0x14c3dc,X as _0x45b326,Y as _0x275a59,Z as _0x1aa4d0,_ as _0xda46aa,$ as _0x155983,a0 as _0x2c0e73,a1 as _0x1cb81d,a2 as _0x3c6f2d,a3 as _0x39d700,a4 as _0x395fb0,a5 as _0x3f85f2,a6 as _0x5a511e,a7 as _0x2f0725,a8 as _0x265878,a9 as _0x540e7a,aa as _0x58c1dc,ab as _0x24512c,ac as _0x32d32c,ad as _0x271745,ae as _0x931123,af as _0x24f48f,ag as _0x5df307,ah as _0x51a88,ai as _0x4401e4}from'./vendor-fsmZiMPK.js';(function(){const _0x29ffba=_0x232089,_0x4da923=document[_0x29ffba(0x12e0)+_0x29ffba(0x44e8)](_0x29ffba(0x1410))[_0x29ffba(0x2485)];if(_0x4da923&&_0x4da923[_0x29ffba(0x4d79)]&&_0x4da923[_0x29ffba(0x4d79)](_0x29ffba(0xa6e)+'eload'))return;for(const _0x4cec16 of document[_0x29ffba(0x51ab)+_0x29ffba(0x320a)]('link[rel'+_0x29ffba(0xe95)+_0x29ffba(0x202d)+']'))_0xdb9d7d(_0x4cec16);new MutationObserver(_0x13c87d=>{const _0x505772=_0x29ffba;for(const _0x4a9859 of _0x13c87d)if(_0x4a9859[_0x505772(0x9ae)]===_0x505772(0x755)+'t'){for(const _0x269f82 of _0x4a9859[_0x505772(0x2c78)+'es'])_0x269f82[_0x505772(0x212b)]===_0x505772(0x405)&&_0x269f82[_0x505772(0x3f14)]===_0x505772(0xa6e)+_0x505772(0x2173)&&_0xdb9d7d(_0x269f82);}})['observe'](document,{'childList':!0x0,'subtree':!0x0});function _0xa837d(_0x22a18d){const _0x475389=_0x29ffba,_0x5c4e5f={};return _0x22a18d[_0x475389(0x2f35)+'y']&&(_0x5c4e5f[_0x475389(0x2f35)+'y']=_0x22a18d[_0x475389(0x2f35)+'y']),_0x22a18d[_0x475389(0x1097)+_0x475389(0x3ddc)]&&(_0x5c4e5f[_0x475389(0x1097)+_0x475389(0x3ddc)]=_0x22a18d[_0x475389(0x1097)+_0x475389(0x3ddc)]),_0x22a18d[_0x475389(0x119e)+'gin']==='use-cred'+'entials'?_0x5c4e5f[_0x475389(0x5c1)+_0x475389(0x1a53)]=_0x475389(0x503d):_0x22a18d['crossOri'+_0x475389(0x3515)]===_0x475389(0x2761)+'s'?_0x5c4e5f['credenti'+_0x475389(0x1a53)]='omit':_0x5c4e5f['credenti'+_0x475389(0x1a53)]=_0x475389(0x49d1)+'gin',_0x5c4e5f;}function _0xdb9d7d(_0xf18e93){const _0x53e9cf=_0x29ffba;if(_0xf18e93['ep'])return;_0xf18e93['ep']=!0x0;const _0x1e9b8e=_0xa837d(_0xf18e93);fetch(_0xf18e93[_0x53e9cf(0x2492)],_0x1e9b8e);}}());const Ki=_0x232089(0x415)+'yeomai-w'+_0x232089(0x263e)+'.png',tr=_0x232089(0x85a)+_0x232089(0x33ec),Zo='/images/'+'eagle-lo'+_0x232089(0x3c09),nr={'resizeTimeline':_0x232089(0x8ae)+_0x232089(0x3c0c)+_0x232089(0x4a20)+'der\x20Zeit'+_0x232089(0x3852)+_0x232089(0x3ef4)+'n','systems':_0x232089(0x4538),'particlesBones':_0x232089(0x35da)+_0x232089(0x2e1e)+'n)','rootBone':_0x232089(0x4ff5)+_0x232089(0x3c5c),'hudTip':_0x232089(0x3fd1)+'·\x20Klicke'+'n\x20Sie\x20mi'+_0x232089(0x4046)+_0x232089(0x235d)+_0x232089(0x31f5)+_0x232089(0x1269)+_0x232089(0x2a2b)+'zu\x20ziehe'+'n','title':_0x232089(0x4f7f)+'rtikeled'+'itor'},or={'documentTitle':'Spine-Pa'+_0x232089(0x51be)+_0x232089(0x197f),'titleLead':_0x232089(0x2ae)+_0x232089(0x50d2)+'eln','titleAccent':_0x232089(0xaac)+_0x232089(0x2cde)+_0x232089(0x3234),'backToTools':_0x232089(0x2314)+'ur\x20Werkz'+_0x232089(0x14a8)+'hl','editor':{'badge':'PARTIKEL'+_0x232089(0x3413),'title':_0x232089(0x35da)+_0x232089(0x336f),'description':_0x232089(0x2665)+_0x232089(0x4027)+_0x232089(0x1cc2)+_0x232089(0xb34)+_0x232089(0x3540)+_0x232089(0x4585)+'\x20Spine-P'+_0x232089(0x29ab)+_0x232089(0x5163)+'ei.','tagPreview':_0x232089(0x53a9)+'schau','tagSequence':_0x232089(0x3f23)+_0x232089(0x283f)+_0x232089(0x4562),'tagExport':'JSON-Exp'+_0x232089(0x4562),'cta':_0x232089(0x35daLine truncated
-2
View File
@@ -1,2 +0,0 @@
var ft=Object.defineProperty;var gt=(W,t,e)=>t in W?ft(W,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):W[t]=e;var T=(W,t,e)=>gt(W,typeof t!="symbol"?t+"":t,e);import{f as ht,R as pt,N as dt,ac as ut,Z as mt,b4 as yt,O as rt,b5 as at,U as D,B as Tt}from"./index-9ofazf7F.js";import{$ as Rt,a0 as Yt,a1 as Ft,a2 as Et,y as _t,a3 as Ot,a4 as kt,a5 as Xt,a6 as Bt,a7 as Nt,a8 as Dt,a9 as $t,aa as zt,ab as Wt,ad as qt,H as Gt,ae as Jt,af as Ht,ag as Zt,ah as Kt,ai as Qt,aj as jt,ak as te,al as ee,am as se,an as ne,ao as ie,ap as oe,aq as re,ar as ae,as as le,at as ce,au as he,av as pe,aw as de,ax as ue,ay as fe,az as ge,aA as me,aB as ye,aC as Te,aD as be,aE as we,aF as xe,aG as Ae,aH as Pe,aI as Ie,aJ as Ce,aK as Ve,aL as Le,aM as Se,aN as Me,aO as ve,aP as Ue,aQ as Re,aR as Ye,aS as Fe,aT as Ee,x as _e,aU as Oe,aV as ke,aW as Xe,aX as Be,aY as Ne,aZ as De,a_ as $e,a$ as ze,b0 as We,b1 as qe,b2 as Ge,b3 as Je,b6 as He,b7 as Ze,b8 as Ke,b9 as Qe,ba as je,bb as ts,bc as es,bd as ss,be as ns,bf as is,bg as os,bh as rs,bi as as,bj as ls,bk as cs,bl as hs,bm as ps,bn as ds,bo as us,bp as fs,bq as gs,br as ms,bs as ys,bt as Ts,bu as bs,w as ws,X as xs,J as As,Y as Ps,z as Is,bv as Cs,bw as Vs,bx as Ls,by as Ss,bz as Ms,bA as vs,bB as Us,bC as Rs,bD as Ys,bE as Fs,bF as Es,bG as _s,T as Os,bH as ks,bI as Xs,b as Bs,bJ as Ns,c as Ds,bK as $s,bL as zs,bM as Ws,bN as qs,bO as Gs,bP as Js,bQ as Hs,bR as Zs,bS as Ks,bT as Qs,bU as js,bV as tn,bW as en,bX as sn,bY as nn,bZ as on,b_ as rn,V as an,b$ as ln,c0 as cn,c1 as hn,c2 as pn,c3 as dn}from"./index-9ofazf7F.js";class It{constructor(t){T(this,"skeletonData");T(this,"animationToMixTime",{});T(this,"defaultMix",0);if(!t)throw new Error("skeletonData cannot be null.");this.skeletonData=t}setMix(t,e,n){return typeof t=="string"?this.setMix1(t,e,n):this.setMix2(t,e,n)}setMix1(t,e,n){const s=this.skeletonData.findAnimation(t);if(!s)throw new Error(`Animation not found: ${t}`);const i=this.skeletonData.findAnimation(e);if(!i)throw new Error(`Animation not found: ${e}`);this.setMix2(s,i,n)}setMix2(t,e,n){if(!t)throw new Error("from cannot be null.");if(!e)throw new Error("to cannot be null.");const s=`${t.name}.${e.name}`;this.animationToMixTime[s]=n}getMix(t,e){const n=`${t.name}.${e.name}`,s=this.animationToMixTime[n];return s===void 0?this.defaultMix:s}}class Ct{constructor(t,e="",n=new bt,s=new lt){T(this,"textureLoader");T(this,"pathPrefix");T(this,"downloader");T(this,"cache");T(this,"errors",{});T(this,"toLoad",0);T(this,"loaded",0);T(this,"texturePmaInfo",{});this.textureLoader=t,this.pathPrefix=e,this.downloader=n,this.cache=s}start(t){return this.toLoad++,this.pathPrefix+t}success(t,e,n){this.toLoad--,this.loaded++,this.cache.assets[e]=n,this.cache.assetsRefCount[e]=(this.cache.assetsRefCount[e]||0)+1,t&&t(e,n)}error(t,e,n){this.toLoad--,this.loaded++,this.errors[e]=n,t&&t(e,n)}loadAll(){return new Promise((e,n)=>{const s=()=>{if(this.isLoadingComplete()){this.hasErrors()?n(this.errors):e(this);return}requestAnimationFrame(s)};requestAnimationFrame(s)})}setRawDataURI(t,e){this.downloader.rawDataUris[this.pathPrefix+t]=e}loadBinary(t,e=()=>{},n=()=>{}){t=this.start(t),!this.reuseAssets(t,e,n)&&(this.cache.assetsLoaded[t]=new Promise((s,i)=>{this.downloader.downloadBinary(t,o=>{this.success(e,t,o),s(o)},(o,r)=>{const l=`Couldn't load binary ${t}: status ${o}, ${r}`;this.error(n,t,l),i(l)})}))}loadText(t,e=()=>{},n=()=>{}){t=this.start(t),this.downloader.downloadText(t,s=>{this.success(e,t,s)},(s,i)=>{this.error(n,t,`Couldn't load text ${t}: status ${s}, ${i}`)})}loadJson(t,e=()=>{},n=()=>{}){t=this.start(t),!this.reuseAssets(t,e,n)&&(this.cache.assetsLoaded[t]=new Promise((s,i)=>{this.downloader.downloadJson(t,o=>{this.success(e,t,o),s(o)},(o,r)=>{const l=`Couldn't load JSON ${t}: status ${o}, ${r}`;this.error(n,t,l),i(l)})}))}reuseAssets(t,e=()=>{},n=()=>{}){const s=this.cache.getAsset(t),i=s!==void 0;return i&&(this.cache.assetsLoaded[t]=s.then(o=>(o=o instanceof Image||o instanceof ImageBitmap?this.textureLoader(o):o,this.success(e,t,o),o)).catch(o=>{this.error(n,t,o)})),i}loadTexture(t,e=()=>{},n=()=>{}){if(t=this.start(t),this.reuseAssets(t,e,n))return;const s=this.texturePmaInfo[t];this.cache.assetsLoaded[t]=new Promise((i,o)=>{if(!!!(typeof window<"u"&&typeof navigator<"u"&&window.document))fetch(t,{mode:"cors"}).then(c=>{if(c.ok)return c.blob();const a=`Couldn't load image: ${t}`;this.error(n,t,`Couldn't load image: ${t}`),o(a)}).then(c=>c?createImageBitmap(c,{premultiplyAlpha:"none",colorSpaceConversion:"none"}):null).then(c=>{if(c){const a=this.createTexture(t,s,c);this.success(e,t,a),i(a)}});else{const c=new Image;c.crossOrigin="anonymous",c.onload=()=>{const a=this.createTexture(t,s,c);this.success(e,t,a),i(a)},c.onerror=()=>{const a=`Couldn't load image: ${t}`;this.error(n,t,a),o(a)},this.downloader.rawDataUris[t]&&(t=this.downloader.rawDataUris[t]),c.src=t}})}loadTextureAtlas(t,e=()=>{},n=()=>{},s){const i=t.lastIndexOf("/"),o=i>=0?t.substring(0,i+1)Line truncated
${n}`:""}`)}remove(t){t=this.pathPrefix+t;const e=this.cache.assets[t];return e.dispose&&e.dispose(),delete this.cache.assets[t],delete this.cache.assetsRefCount[t],delete this.cache.assetsLoaded[t],e}removeAll(){for(const t in this.cache.assets){const e=this.cache.assets[t];e.dispose&&e.dispose()}this.cache.assets={},this.cache.assetsLoaded={},this.cache.assetsRefCount={}}isLoadingComplete(){return this.toLoad===0}getToLoad(){return this.toLoad}getLoaded(){return this.loaded}dispose(){this.removeAll()}disposeAsset(t){const e=this.cache.assets[t];if(e instanceof ht){e.dispose();return}this.disposeAssetInternal(t)}hasErrors(){return Object.keys(this.errors).length>0}getErrors(){return this.errors}disposeAssetInternal(t){if(this.cache.assetsRefCount[t]>0&&--this.cache.assetsRefCount[t]===0)return this.remove(t)}createTextureAtlas(t,e,n,s){const i=new ht(t);i.dispose=()=>{var o;if(!(this.cache.assetsRefCount[n]<=0)){this.disposeAssetInternal(n);for(const r of i.pages)(o=r.texture)==null||o.dispose()}};for(const o of i.pages){const r=this.texturePath(e,o.name,s);this.texturePmaInfo[this.pathPrefix+r]=o.pma}return i}createTexture(t,e,n){const s=this.textureLoader(n,e),i=s.dispose.bind(s);return s.dispose=()=>{this.disposeAssetInternal(t)&&i()},s}texturePath(t,e,n){return n?n[e]:t+e}}const nt=class nt{constructor(){T(this,"assets",{});T(this,"assetsRefCount",{});T(this,"assetsLoaded",{})}static getCache(t){const e=nt.AVAILABLE_CACHES.get(t);if(e)return e;const n=new nt;return nt.AVAILABLE_CACHES.set(t,n),n}async addAsset(t,e){return this.assetsLoaded[t]=Promise.resolve(e),this.assets[t]=e,e}getAsset(t){return this.assetsLoaded[t]}};T(nt,"AVAILABLE_CACHES",new Map);let lt=nt;class bt{constructor(){T(this,"callbacks",{});T(this,"rawDataUris",{})}dataUriToString(t){if(!t.startsWith("data:"))throw new Error("Not a data URI.");let e=t.indexOf("base64,");return e!==-1?(e+=7,atob(t.substr(e))):t.substr(t.indexOf(",")+1)}base64ToUint8Array(t){var e=window.atob(t),n=e.length,s=new Uint8Array(n);for(let i=0;i<n;i++)s[i]=e.charCodeAt(i);return s}dataUriToUint8Array(t){if(!t.startsWith("data:"))throw new Error("Not a data URI.");let e=t.indexOf("base64,");if(e===-1)throw new Error("Not a binary data URI.");return e+=7,this.base64ToUint8Array(t.substr(e))}downloadText(t,e,n){if(this.start(t,e,n))return;const s=this.rawDataUris[t];if(s&&!s.includes(".")){try{this.finish(t,200,this.dataUriToString(s))}catch(r){this.finish(t,400,JSON.stringify(r))}return}const i=new XMLHttpRequest;i.overrideMimeType("text/html"),i.open("GET",s||t,!0);const o=()=>{this.finish(t,i.status,i.responseText)};i.onload=o,i.onerror=o,i.send()}downloadJson(t,e,n){this.downloadText(t,s=>{e(JSON.parse(s))},n)}downloadBinary(t,e,n){if(this.start(t,e,n))return;const s=this.rawDataUris[t];if(s&&!s.includes(".")){try{this.finish(t,200,this.dataUriToUint8Array(s))}catch(r){this.finish(t,400,JSON.stringify(r))}return}const i=new XMLHttpRequest;i.open("GET",s||t,!0),i.responseType="arraybuffer";const o=()=>{this.finish(t,i.status,i.response)};i.onload=()=>{i.status===200||i.status===0?this.finish(t,200,new Uint8Array(i.response)):o()},i.onerror=o,i.send()}start(t,e,n){let s=this.callbacks[t];try{if(s)return!0;this.callbacks[t]=s=[]}finally{s.push(e,n)}}finish(t,e,n){const s=this.callbacks[t];if(delete this.callbacks[t],e===200||e===0)for(let i=0,o=s.length;i<o;i+=2)s[i](n);else for(let i=1,o=s.length;i<o;i+=2)s[i](e,n)}}class Vt{constructor(t,e=!1){T(this,"atlas");T(this,"allowMissingRegions");this.atlas=t,this.allowMissingRegions=e}findRegions(t,e,n){const s=n.regions;for(let i=0,o=s.length;i<o;i++)s[i]=this.findRegion(t,n.getPath(e,i))}findRegion(t,e){const n=this.atlas.findRegion(e);if(!n&&!this.allowMissingRegions)throw new Error(`Region not found in atlas: ${e} (attachment: ${t})`);return n}newRegionAttachment(t,e,n,s,i){return this.findRegions(n,s,i),new pt(n,i)}newMeshAttachment(t,e,n,s,i){return this.findRegions(n,s,i),new dt(n,i)}newBoundingBoxAttachment(t,e,n){return new ut(n)}newPathAttachment(t,e,n){return new mt(n)}newPointAttachment(t,e,n){return new yt(n)}newClippingAttachment(t,e,n){return new rt(n)}}class Lt{constructor(){T(this,"minX",0);T(this,"minY",0);T(this,"maxX",0);T(this,"maxY",0);T(this,"boundingBoxes",[]);T(this,"polygons",[]);T(this,"polygonPool",new at(()=>D.newFloatArray(16)))}update(t,e){if(!t)throw new Error("skeleton cannot be null.");const n=this.boundingBoxes,s=this.polygons,i=this.polygonPool,o=t.slots,r=o.length;n.length=0,i.freeAll(s),s.length=0;for(let l=0;l<r;l++){const c=o[l];if(!c.bone.active)continue;const a=c.appliedPose.attachment;if(a instanceof ut){n.push(a);let h=i.obtain();h.length!==a.worldVerticesLength&&(h=D.newFloatArray(a.worldVerticesLength)),s.push(h),a.computeWorldVertices(t,c,0,a.worldVerticesLength,h,0,2)}}e?this.aabbCompute():(this.minX=Number.POSITIVE_INFINITY,this.minY=Number.POSITIVE_INFINITY,this.maxX=Number.NEGATIVE_INFINITY,this.maxY=Number.NEGATIVE_INFINITY)}aabbCompute(){let t=Number.POSITIVE_INFLine truncated
-71
View File
@@ -1,71 +0,0 @@
var Ae=Object.defineProperty;var Be=(m,o,e)=>o in m?Ae(m,o,{enumerable:!0,configurable:!0,writable:!0,value:e}):m[o]=e;var a=(m,o,e)=>Be(m,typeof o!="symbol"?o+"":o,e);import{T as Fe,a as he,b as F,S as ue,M as pe,c as oe,W as ne,B as H,d as z,L as Te,E as O,e as ce,p as q,f as Ee,g as fe,A as Q,h as me,i as De,j as V,s as re,G as we,k as $,l as Y,m as Le,P as Ie,n as Re,o as Ne,C as X,q as be,r as _e,t as Ue,u as Ye,v as Xe,w as ee,x as j,y as ke,z as Ve,D as J,F as ge,V as Ge,H as ae,I as We,J as $e,U as xe,K as E,R as ve,N as ye,O as Pe,Q as Oe,X as He,Y as ze,Z as qe,_ as Ke}from"./index-9ofazf7F.js";import{$ as bt,a0 as kt,a1 as vt,a2 as yt,a3 as Pt,a4 as St,a5 as Mt,a6 as At,a7 as Bt,a8 as Ft,a9 as Et,aa as Dt,ab as Lt,ac as It,ad as Rt,ae as Nt,af as _t,ag as Ut,ah as Yt,ai as Xt,aj as Vt,ak as Gt,al as Wt,am as $t,an as Ot,ao as Ht,ap as zt,aq as qt,ar as Kt,as as Zt,at as Jt,au as Qt,av as jt,aw as es,ax as ts,ay as ss,az as os,aA as ns,aB as as,aC as rs,aD as is,aE as ls,aF as hs,aG as cs,aH as ds,aI as us,aJ as ps,aK as fs,aL as ms,aM as gs,aN as xs,aO as Cs,aP as Ts,aQ as ws,aR as bs,aS as ks,aT as vs,aU as ys,aV as Ps,aW as Ss,aX as Ms,aY as As,aZ as Bs,a_ as Fs,a$ as Es,b0 as Ds,b1 as Ls,b2 as Is,b3 as Rs,b4 as Ns,b5 as _s,b6 as Us,b7 as Ys,b8 as Xs,b9 as Vs,ba as Gs,bb as Ws,bc as $s,bd as Os,be as Hs,bf as zs,bg as qs,bh as Ks,bi as Zs,bj as Js,bk as Qs,bl as js,bm as eo,bn as to,bo as so,bp as oo,bq as no,br as ao,bs as ro,bt as io,bu as lo,bv as ho,bw as co,bx as uo,by as po,bz as fo,bA as mo,bB as go,bC as xo,bD as Co,bE as To,bF as wo,bG as bo,bH as ko,bI as vo,bJ as yo,bK as Po,bL as So,bM as Mo,bN as Ao,bO as Bo,bP as Fo,bQ as Eo,bR as Do,bS as Lo,bT as Io,bU as Ro,bV as No,bW as _o,bX as Uo,bY as Yo,bZ as Xo,b_ as Vo,b$ as Go,c0 as Wo,c1 as $o,c2 as Oo,c3 as Ho}from"./index-9ofazf7F.js";import{SkeletonClipping as de,SkeletonPhysicsMovement as Ze,AnimationStateData as Je,AtlasAttachmentLoader as Qe,SkeletonBounds as je}from"./index-Cz2cACyM.js";import{AssetCache as qo,AssetManagerBase as Ko,Downloader as Zo,SkeletonRendererCore as Jo,Triangulator as Qo}from"./index-Cz2cACyM.js";if(typeof window<"u"&&window.PIXI){const m=window.require;window.require=o=>{if(m)return m(o);if(o.startsWith("@pixi/"))return window.PIXI}}const _=class _ extends Fe{constructor(e){super(e.resource.source);a(this,"texture");this.texture=he.from(e)}static from(e){return _.textureMap.has(e)?_.textureMap.get(e):new _(e)}setFilters(e,t){this.texture.baseTexture.scaleMode=_.toPixiTextureFilter(e),this.texture.baseTexture.mipmap=_.toPixiMipMap(e)}setWraps(e,t){this.texture.baseTexture.wrapMode=_.toPixiTextureWrap(e)}dispose(){this.texture.destroy()}static toPixiTextureFilter(e){switch(e){case F.Nearest:case F.MipMapNearestLinear:case F.MipMapNearestNearest:return ue.NEAREST;case F.Linear:case F.MipMapLinearLinear:case F.MipMapLinearNearest:return ue.LINEAR;default:throw new Error(`Unknown texture filter: ${String(e)}`)}}static toPixiMipMap(e){switch(e){case F.Nearest:case F.Linear:return pe.OFF;case F.MipMapNearestLinear:case F.MipMapNearestNearest:case F.MipMapLinearLinear:case F.MipMapLinearNearest:return pe.ON;default:throw new Error(`Unknown texture filter: ${String(e)}`)}}static toPixiTextureWrap(e){switch(e){case oe.ClampToEdge:return ne.CLAMP;case oe.MirroredRepeat:return ne.MIRRORED_REPEAT;case oe.Repeat:return ne.REPEAT;default:throw new Error(`Unknown texture wrap: ${String(e)}`)}}static toPixiBlending(e){switch(e){case H.Normal:return z.NORMAL;case H.Additive:return z.ADD;case H.Multiply:return z.MULTIPLY;case H.Screen:return z.SCREEN;default:throw new Error(`Unknown blendMode: ${String(e)}`)}}};a(_,"textureMap",new Map);let G=_;const K="spineTextureAtlasLoader",et={extension:O.Asset,resolver:{test:m=>V(m,".atlas"),parse:m=>{var e,t;const o=m.split(".");return{resolution:parseFloat(((t=(e=re.RETINA_PREFIX)==null?void 0:e.exec(m))==null?void 0:t[1])??"1"),format:o[o.length-2],src:m}}},loader:{name:K,extension:{type:O.LoadParser,priority:Te.Normal,name:K},test(m){return V(m,".atlas")},async load(m){const o=await re.ADAPTER.fetch(m);if(!o.ok)throw new Error(`[${K}] Failed to fetch ${m}: ${o.status} ${o.statusText}`);return await o.text()},testParse(m,o){const e=V(o.src,".atlas"),t=typeof m=="string",s=o.loadParser===K;return Promise.resolve((e||s)&&t)},unload(m){m.dispose()},async parse(m,o,e){var p;const t=o.data||{};let s=q.dirname(o.src);s&&s.lastIndexOf("/")!==s.length-1&&(s+="/");const n=new Ee(m);if(t.images instanceof fe||typeof t.images=="string"){const h=t.images;t.images={},t.images[n.pages[0].name]=h}const r=[];let l=!0;for(const h of e.parsers)if(h.name==="loadTextures"){l=(p=h.config)==null?void 0:p.preferCreateImageBitmap;break}Q.setPreferences({preferCreateImageBitmap:!1});for(const h of n.pages){const u=h.name,c=t!=null&&t.images?t.images[u]:void 0;if(c instanceof fe)h.setTexture(G.from(c));else{const i=c??q.normalize([...s.split(q.sep),u].join(q.sep)),g={src:De(i,o.src),data:{...t.imageMetadLine truncated
attribute vec2 aVertexPosition;
attribute vec2 aTextureCoord;
uniform mat3 projectionMatrix;
uniform mat3 translationMatrix;
uniform mat3 uTextureMatrix;
varying vec2 vTextureCoord;
void main(void)
{
gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);
vTextureCoord = (uTextureMatrix * vec3(aTextureCoord, 1.0)).xy;
}
`,rt=`
varying vec2 vTextureCoord;
uniform vec4 uColor;
uniform vec4 uDarkColor;
uniform sampler2D uSampler;
void main(void)
{
vec4 texColor = texture2D(uSampler, vTextureCoord);
gl_FragColor.a = texColor.a * uColor.a;
gl_FragColor.rgb = ((texColor.a - 1.0) * uDarkColor.a + 1.0 - texColor.rgb) * uDarkColor.rgb + texColor.rgb * uColor.rgb;
}
`;class it extends Le{constructor(e){const t={uSampler:e??he.EMPTY,alpha:1,uTextureMatrix:Re.IDENTITY,uColor:new Float32Array([1,1,1,1]),uDarkColor:new Float32Array([0,0,0,0])},s={tint:16777215,darkTint:0,alpha:1,pluginName:"darkTintBatch"};super(Ie.from(at,rt),t);a(this,"uvMatrix");a(this,"batchable");a(this,"pluginName");a(this,"_tintRGB");a(this,"_darkTintRGB");a(this,"_colorDirty");a(this,"_alpha");a(this,"_tintColor");a(this,"_darkTintColor");this._colorDirty=!1,this.uvMatrix=new Ne(t.uSampler),this.batchable=!0,this.pluginName=s.pluginName,this._tintColor=new X(s.tint),this._darkTintColor=new X(s.darkTint),this._tintRGB=this._tintColor.toLittleEndianNumber(),this._darkTintRGB=this._darkTintColor.toLittleEndianNumber(),this._alpha=s.alpha,this._colorDirty=!0}get texture(){return this.uniforms.uSampler}set texture(e){this.uniforms.uSampler!==e&&(!this.uniforms.uSampler.baseTexture.alphaMode!=!e.baseTexture.alphaMode&&(this._colorDirty=!0),this.uniforms.uSampler=e,this.uvMatrix.texture=e)}set alpha(e){e!==this._alpha&&(this._alpha=e,this._colorDirty=!0)}get alpha(){return this._alpha}set tint(e){e!==this.tint&&(this._tintColor.setValue(e),this._tintRGB=this._tintColor.toLittleEndianNumber(),this._colorDirty=!0)}get tint(){return this._tintColor.value}set darkTint(e){e!==this.darkTint&&(this._darkTintColor.setValue(e),this._darkTintRGB=this._darkTintColor.toLittleEndianNumber(),this._colorDirty=!0)}get darkTint(){return this._darkTintColor.value}get tintValue(){return this._tintColor.toNumber()}get darkTintValue(){return this._darkTintColor.toNumber()}update(){this._colorDirty&&(this._colorDirty=!1,X.shared.setValue(this._tintColor).premultiply(this._alpha,!0).toArray(this.uniforms.uColor),X.shared.setValue(this._darkTintColor).premultiply(this._alpha,!0).premultiply(1,!1).toArray(this.uniforms.uDarkColor)),this.uvMatrix.update()&&(this.uniforms.uTextureMatrix=this.uvMatrix.mapCoord)}}class lt extends be{constructor(e){super(new nt,new it(e),void 0,void 0);a(this,"_darkTintRGB",0)}get darkTint(){return"darkTint"in this.shader?this.shader.darkTint:null}set darkTint(e){this.shader.darkTint=e}get darkTintValue(){return this.shader.darkTintValue}_renderToBatch(e){const t=this.geometry,s=this.shader;s.uvMatrix&&(s.uvMatrix.update(),this.calculateUvs()),this.calculateVertices(),this.indices=t.indexBuffer.data,this._tintRGB=s._tintRGB,this._darkTintRGB=s._darkTintRGB,this._texture=s.texture;const n=this.material.pluginName;e.batch.setObjectRenderer(e.plugins[n]),e.plugins[n].render(this)}}const y=class y extends lt{constructor(){super();a(this,"name","")}updateFromSpineData(e,t,s,n,r,l,p,h){var C,T;this.texture=e.texture;const u=r/(h?12:8)*2,c=this.geometry.getBuffer("aTextureCoord");((C=c.data)==null?void 0:C.length)!==u&&(c.data=new Float32Array(u));const i=this.geometry.getBuffer("aVertexPosition");((T=i.data)==null?void 0:T.length)!==u&&(i.data=new Float32Array(u));let g=0;const x=c.data,d=i.data;for(let k=0;k<r;k+=h?12:8){let b=k;d[g]=n[b++],d[g+1]=n[b++],b+=4,x[g]=n[b++],x[g+1]=n[b++],g+=2}h?(y.auxColor[0]=n[8],y.auxColor[1]=n[9],y.auxColor[2]=n[10],y.auxColor[3]=n[11],this.darkTint=y.auxColor,y.auxColor[0]=n[2],y.auxColor[1]=n[3],y.auxColor[2]=n[4],y.auxColor[3]=n[5],this.tint=y.auxColor):(y.auxColor[0]=n[2],y.auxColor[1]=n[3],y.auxColor[2]=n[4],y.auxColor[3]=n[5],this.tint=y.auxColor),this.blendMode=G.toPixiBlending(t),this.alpha=y.auxColor[3];const f=this.geometry.indexBuffer;if(f.data.length!==l.length)f.data=new Uint32Array(l);else{const k=f.data;for(let b=0;b<p;b++)k[b]=l[b]}this.name=s,c.update(),i.update(),f.update()}};a(y,"auxColor",[0,0,0,0]);let ie=y;class ht extends we{constructor(e=!1){super();a(this,"_buffer");a(this,"_indexBuffer");this._buffer=new $(void 0,e,!1),this._indexBuffer=new $(void 0,e,!0),this.addAttribute("aVertexPosition",this._buffer,2,!1,Y.FLOAT).addAttribute("aTextureCoord",this._buffer,2,!1,Y.FLOAT).addAttribute("aColor",this._buffer,4,!0,Y.UNSIGNED_BYTE).addAttribute("aDarkColor",this._buffer,4,!0,Y.UNSIGNED_BYTE).addAttribute("aTextureId",this._buffer,1,!0,Y.FLOAT).addIndex(this._indexBuffer)}}const ct=`
precision highp float;
attribute vec2 aVertexPosition;
attribute vec2 aTextureCoord;
attribute vec4 aColor;
attribute vec4 aDarkColor;
attribute float aTextureId;
uniform mat3 projectionMatrix;
uniform mat3 translationMatrix;
uniform vec4 tint;
varying vec2 vTextureCoord;
varying vec4 vColor;
varying vec4 vDarkColor;
varying float vTextureId;
void main(void){
gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);
vTextureCoord = aTextureCoord;
vTextureId = aTextureId;
vColor = aColor * tint;
vDarkColor = aDarkColor * tint;
}
`,dt=`
varying vec2 vTextureCoord;
varying vec4 vColor;
varying vec4 vDarkColor;
varying float vTextureId;
uniform sampler2D uSamplers[%count%];
void main(void){
vec4 color;
%forloop%
gl_FragColor.a = color.a * vColor.a;
gl_FragColor.rgb = ((color.a - 1.0) * vDarkColor.a + 1.0 - color.rgb) * vDarkColor.rgb + color.rgb * vColor.rgb;
}
`;class Se extends _e{constructor(o){super(o),this.shaderGenerator=new Ue(ct,dt),this.geometryClass=ht,this.vertexSize=7}packInterleavedGeometry(o,e,t,s,n){const{uint32View:r,float32View:l}=e,p=s/this.vertexSize,h=o.uvs,u=o.indices,c=o.vertexData,i=o._texture.baseTexture._batchLocation,g=Math.min(o.worldAlpha,1),x=X.shared.setValue(o._tintRGB).toPremultiplied(g,!0),d=X.shared.setValue(o._darkTintRGB).premultiply(g,!0).toPremultiplied(1,!1);for(let f=0;f<c.length;f+=2)l[s++]=c[f],l[s++]=c[f+1],l[s++]=h[f],l[s++]=h[f+1],r[s++]=x,r[s++]=d,l[s++]=i;for(let f=0;f<u.length;f++)t[n++]=p+u[f]}}a(Se,"extension",{name:"darkTintBatch",type:O.RendererPlugin});ce.add(Se);const U=class U extends be{constructor(){const e=new Ye;e.getBuffer("aVertexPosition").static=!1,e.getBuffer("aTextureCoord").static=!1;const t=new Xe(he.EMPTY);super(e,t);a(this,"name","");a(this,"warnedTwoTint",!1)}updateFromSpineData(e,t,s,n,r,l,p,h){var C,T;this.texture=e.texture;const u=r/(h?12:8)*2,c=this.geometry.getBuffer("aTextureCoord");((C=c.data)==null?void 0:C.length)!==u&&(c.data=new Float32Array(u));const i=this.geometry.getBuffer("aVertexPosition");((T=i.data)==null?void 0:T.length)!==u&&(i.data=new Float32Array(u));let g=0;const x=c.data,d=i.data;for(let k=0;k<r;k+=h?12:8){let b=k;d[g]=n[b++],d[g+1]=n[b++],b+=4,x[g]=n[b++],x[g+1]=n[b++],g+=2}h&&!this.warnedTwoTint&&(console.warn("DarkTint is not enabled by default. To enable use a DarkSlotMesh factory while creating the Spine object."),this.warnedTwoTint=!0),U.auxColor[0]=n[2],U.auxColor[1]=n[3],U.auxColor[2]=n[4],U.auxColor[3]=n[5],this.tint=U.auxColor,this.alpha=U.auxColor[3],this.blendMode=G.toPixiBlending(t);const f=this.geometry.indexBuffer;if(f.data.length!==l.length)f.data=new Uint32Array(l);else{const k=f.data;for(let b=0;b<p;b++)k[b]=l[b]}this.name=s,c.update(),i.update(),f.update()}};a(U,"auxColor",[0,0,0,0]);let le=U;class mt{constructor(o,e,t,s){a(this,"x");a(this,"y");a(this,"width");a(this,"height");this.x=o,this.y=e,this.width=t,this.height=s}calculateBounds(){return{x:this.x,y:this.y,width:this.width,height:this.height}}}class gt{constructor(o=!1){a(this,"clipping");this.clipping=o}calculateBounds(o){if(!o.skeleton)return{x:0,y:0,width:0,height:0};const e=new ee(o.skeleton.data);e.setupPose(),e.updateWorldTransform(j.update);const t=e.getBoundsRect(this.clipping?new de:void 0);return t.width===Number.NEGATIVE_INFINITY?{x:0,y:0,width:0,height:0}:t}}class xt{constructor(o,e=[],t=.05,s=!1){a(this,"animation");a(this,"skins");a(this,"timeStep");a(this,"clipping");this.animation=o,this.skins=e,this.timeStep=t,this.clipping=s}calculateBounds(o){if(!o.skeleton||!o.state)return{x:0,y:0,width:0,height:0};const e=new ke(o.state.data),t=new ee(o.skeleton.data),s=this.clipping?new de:void 0,n=t.data;if(this.skins.length>0){const l=new Ve("custom-skin");for(const p of this.skins){const h=n.findSkin(p);h!=null&&l.addSkin(h)}t.setSkin(l)}t.setupPose();const r=this.animation!=null?n.findAnimation(this.animation):null;if(r==null){t.updateWorldTransform(j.update);const l=t.getBoundsRect(s);return l.width===Number.NEGATIVE_INFINITY?{x:0,y:0,width:0,height:0}:l}else{let l=Number.POSITIVE_INFINITY,p=Number.POSITIVE_INFINITY,h=Number.NEGATIVE_INFINITY,u=Number.NEGATIVE_INFINITY;e.clearTracks(),e.setAnimation(0,r,!1);const c=Math.max(r.duration/this.timeStep,1);for(let g=0;g<c;g++){const x=g>0?this.timeStep:0;e.update(x),e.apply(t),t.update(x),t.updateWorldTransform(j.update);const d=t.getBoundsRect(s);l=Math.min(l,d.x),p=Math.min(p,d.y),h=Math.max(h,d.x+d.width),u=Math.max(u,d.y+d.height)}const i={x:l,y:p,width:h-l,height:u-p};return i.width===Number.NEGATIVE_INFINITY?{x:0,y:0,width:0,height:0}:i}}}const w=class w extends J{constructor(e){super();a(this,"skeleton");a(this,"state");a(this,"skeletonPhysics");a(this,"darkTint",!1);a(this,"hasNeverUpdated",!0);a(this,"_debug");a(this,"slotMeshFactory",()=>new le);a(this,"beforeUpdateWorldTransforms",()=>{});a(this,"afterUpdateWorldTransforms",()=>{});a(this,"_autoUpdate",!1);a(this,"_ticker",ge.shared);a(this,"meshesCache",new Map);a(this,"lightColor",new ae);a(this,"darkColor",new ae);a(this,"clippingVertAux",new Float32Array(6));a(this,"_boundsProvider");a(this,"_boundsPoint",new We);a(this,"_boundsSpineID",-1);a(this,"_boundsSpineDirty",!0);a(this,"slotsObject",new Map);a(this,"verticesCache",xe.newFloatArray(1024));a(this,"clippingSlotToPixiMasks",{});e instanceof $e?e={skeletonData:e}:"skeleton"in e&&(e=new.target.createOptions(e));const{autoUpdate:t=!0,boundsProvider:s,darkTint:n,skeletonData:r,ticker:l}=e;this.skeleton=new ee(r),this.skeletonPhysics=new Ze(this.skeleton,{readTransform:(p,h)=>this.readPhysicsTransform(p,h),worldToSkeleton:p=>this.pixiWorldCoordinatesToSkeleton(p)}),this.state=new ke(new Je(r)),l&&(this._ticker=l),this.autoUpdate=t,this.boundsProvider=s,this.darkTint=n===void 0?this.skeleton.slots.some(p=>!!p.data.setupPose.darkColor):n,this.darkTint&&(this.slotMeshFactory=()=>new ie)}get debug(){return this._debug}set debu Line truncated
-1
View File
@@ -1 +0,0 @@
.help-overlay[data-v-78204b9d]{position:absolute;top:0;right:0;bottom:0;left:0;z-index:40;display:flex;align-items:center;justify-content:center;padding:72px 24px 28px;box-sizing:border-box;background:#05080fb8;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}.help-dialog[data-v-78204b9d]{width:min(820px,100%);max-height:100%;display:flex;flex-direction:column;overflow:hidden;border:1px solid #3a4864;border-radius:14px;background:#141a27;color:#b8c3d8;box-shadow:0 22px 70px #0000009e}.help-head[data-v-78204b9d]{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;padding:18px 20px 15px;border-bottom:1px solid #2b354a;background:linear-gradient(135deg,#202942,#181e2d)}.help-head h2[data-v-78204b9d]{margin:0;color:#eef2ff;font-size:19px}.help-head p[data-v-78204b9d]{margin:5px 0 0;color:#7786a3;font-size:11px}.help-close[data-v-78204b9d]{width:28px;height:28px;flex:0 0 28px;border:1px solid #43516b;border-radius:6px;background:#273249;color:#ccd7ed;cursor:pointer}.help-close[data-v-78204b9d]:hover{border-color:#7774ff;background:#3b4670;color:#fff}.help-body[data-v-78204b9d]{min-height:0;overflow:auto;padding:18px 20px 21px}.help-section[data-v-78204b9d]{padding:14px 15px;border:1px solid #2c3850;border-radius:10px;background:#181f2e}.help-section h3[data-v-78204b9d]{margin:0 0 11px;color:#9fb2ff;font-size:13px}.help-start ol[data-v-78204b9d]{margin:0;padding-left:21px;color:#aab6cc;font-size:12px;line-height:1.75}.help-start li[data-v-78204b9d]::marker{color:#7774ff;font-weight:700}.help-section b[data-v-78204b9d]{color:#dce4f7}.help-grid[data-v-78204b9d]{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(250px,.85fr);gap:12px;margin-top:12px}.help-list[data-v-78204b9d]{display:grid;gap:0;margin:0}.help-list>div[data-v-78204b9d]{display:grid;grid-template-columns:78px 1fr;gap:9px;padding:7px 0;border-bottom:1px solid #263146}.help-list>div[data-v-78204b9d]:last-child{border-bottom:0}.help-list dt[data-v-78204b9d]{color:#d3dcf0;font-size:11px;font-weight:700}.help-list dd[data-v-78204b9d]{margin:0;color:#8795ae;font-size:11px;line-height:1.5}.shortcut-list[data-v-78204b9d]{display:grid;gap:7px}.shortcut-list>div[data-v-78204b9d]{display:flex;align-items:center;min-height:25px;gap:5px}.shortcut-list kbd[data-v-78204b9d]{min-width:24px;box-sizing:border-box;padding:3px 6px;border:1px solid #465470;border-bottom-width:2px;border-radius:5px;background:#101623;color:#e0e7f6;font:10px/1.2 ui-monospace,SFMono-Regular,Menlo,monospace;text-align:center}.shortcut-list span[data-v-78204b9d]{color:#65728b;font-size:10px}.shortcut-list em[data-v-78204b9d]{margin-left:auto;color:#9ca9c1;font-size:11px;font-style:normal}.help-note[data-v-78204b9d]{margin:11px 0 0;padding-top:9px;border-top:1px solid #2a3549;color:#697791;font-size:10px;line-height:1.55}.help-export[data-v-78204b9d]{margin-top:12px}.help-export p[data-v-78204b9d]{margin:0;color:#8997b0;font-size:11px;line-height:1.65}.help-doc-title[data-v-78204b9d]{margin:16px 2px 2px;color:#9fb2ff;font-size:13px;font-weight:700;letter-spacing:.5px}.help-module[data-v-78204b9d]{margin-top:12px}.help-module-head[data-v-78204b9d]{display:flex;align-items:center;gap:8px;width:100%;padding:0;border:0;background:transparent;color:#9fb2ff;font:inherit;font-size:13px;font-weight:700;text-align:left;cursor:pointer}.help-module-head[data-v-78204b9d]:hover{color:#fff}.help-module-head .mtitle[data-v-78204b9d]{flex:1;min-width:0}.help-module-head .caret[data-v-78204b9d]{flex:0 0 auto;color:#7b86a2;font-size:12px}.help-module.open .help-module-head[data-v-78204b9d]{color:#fff}.help-module.open .help-module-head .caret[data-v-78204b9d]{color:#9fb2ff}.help-module .mnum[data-v-78204b9d]{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:6px;background:linear-gradient(135deg,#4a53b8,#6a5fd0);color:#fff;font-size:12px;font-weight:700}.help-module.help-connector[data-v-78204b9d]{border-color:#4a4f8a;background:linear-gradient(135deg,#1d2442,#181d2f)}.help-module.help-connector .help-module-head[data-v-78204b9d]{color:#b8c2ff}.help-module .connector-intro[data-v-78204b9d]{margin:0 0 10px;color:#9aa8c4;font-size:11px;line-height:1.6}.help-module .connector-intro b[data-v-78204b9d]{color:#dce4f7}.help-module .dl-link[data-v-78204b9d]{display:inline-flex;flex-direction:column;align-items:flex-start;gap:2px;margin:0 10px 6px 0;padding:6px 12px;border:1px solid #5652b5;border-radius:6px;background:#4540a0;color:#fff;font-size:12px;font-weight:700;text-decoration:none}.help-module .dl-link[data-v-78204b9d]:hover{border-color:#8982ff;background:#554dc2}.help-module .dl-link small[data-v-78204b9d]{color:#cfe0ff;font-weight:500;font-size:9px}.help-module-body[data-v-78204b9d]{padding-top:10px}@media(max-width:760px){.help-overlay[data-v-78204b9d]{padding:66px 12px 14px}.help-grid[data-v-78204b9d]{grid-template-columns:1fr}}.topbar[data-v-612a51be]{position:absolute;top:10px;left:10px;right:10px;dispLine truncated
+1
View File
@@ -0,0 +1 @@
.language-picker[data-v-811a66dc]{display:flex;height:28px;align-items:center;gap:6px;margin-left:auto;color:#9aa8c1;font-size:11px;white-space:nowrap}.language-dropdown[data-v-811a66dc]{position:relative}.language-trigger[data-v-811a66dc]{display:flex;height:28px;min-width:88px;align-items:center;gap:7px;padding:0 8px;border:1px solid #3a4963;border-radius:6px;outline:none;background:#202a3b;color:#dbe4f5;font:inherit;font-size:11px;cursor:pointer}.language-trigger[data-v-811a66dc]:hover,.language-trigger.open[data-v-811a66dc]{border-color:#5b608c;background:#2b3a5c}.language-trigger[data-v-811a66dc]:focus-visible{border-color:#7774ff}.language-flag-icon[data-v-811a66dc],.language-option-flag-icon[data-v-811a66dc]{display:block;width:22px;height:15px;flex:0 0 auto;overflow:hidden;border-radius:2px;box-shadow:0 0 0 1px #ffffff1f}.language-short[data-v-811a66dc]{min-width:20px;color:#dbe4f5;font-size:11px;font-weight:600}.language-chevron[data-v-811a66dc]{width:10px;height:6px;margin-left:auto;fill:none;stroke:#aab;stroke-width:1.7;transition:transform .15s ease}.language-trigger.open .language-chevron[data-v-811a66dc]{transform:rotate(180deg)}.language-menu[data-v-811a66dc]{position:absolute;right:0;bottom:calc(100% + 6px);z-index:30;width:190px;max-height:min(360px,calc(100vh - 120px));overflow-y:auto;padding:5px;border:1px solid #343b50;border-radius:9px;background:#141420fa;box-shadow:0 8px 24px #0000007a}.menu-down .language-menu[data-v-811a66dc]{top:calc(100% + 6px);bottom:auto}.language-option[data-v-811a66dc]{display:grid;width:100%;min-height:38px;grid-template-columns:24px 1fr 16px;align-items:center;gap:8px;padding:0 7px;border:0;border-radius:6px;background:transparent;color:#aeb8cc;font:inherit;font-size:12px;text-align:left;white-space:nowrap;cursor:pointer}.language-option[data-v-811a66dc]:hover,.language-option[data-v-811a66dc]:focus-visible{outline:none;background:#2b3a5c;color:#fff}.language-option.selected[data-v-811a66dc]{background:#343b63;color:#fff}.language-check[data-v-811a66dc]{justify-self:end;color:#fff;font-size:18px;font-weight:500}.welcome-shell[data-v-1a06af44]{position:fixed;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;overflow:hidden;box-sizing:border-box;padding:clamp(22px,3vw,42px) clamp(22px,4vw,64px) 28px;color:#eef0f5;background:radial-gradient(circle at 17% 0%,rgba(218,45,57,.16),transparent 32%),radial-gradient(circle at 85% 8%,rgba(72,100,170,.16),transparent 30%),linear-gradient(145deg,#09090d,#0d0f15 52%,#090b10);font-family:system-ui,-apple-system,Segoe UI,sans-serif}.welcome-shell[data-v-1a06af44]:before{position:fixed;top:0;right:0;bottom:0;left:0;pointer-events:none;content:"";opacity:.22;background-image:linear-gradient(rgba(255,255,255,.025) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.025) 1px,transparent 1px);background-size:42px 42px;-webkit-mask-image:linear-gradient(to bottom,#000,transparent 70%);mask-image:linear-gradient(to bottom,#000,transparent 70%)}.welcome-header[data-v-1a06af44],.welcome-intro[data-v-1a06af44],.hub-grid[data-v-1a06af44]{position:relative}.welcome-header[data-v-1a06af44]{display:flex;min-height:42px;align-items:center;gap:18px}.welcome-header[data-v-1a06af44]{z-index:40}.brand-link[data-v-1a06af44]{display:inline-flex;border-radius:6px;transition:opacity .16s ease}.brand-link[data-v-1a06af44]:hover{opacity:.78}.brand-link[data-v-1a06af44]:focus-visible{outline:2px solid #ef5147;outline-offset:5px}.brand-logo[data-v-1a06af44]{display:block;width:clamp(128px,10vw,156px);height:auto}.welcome-intro[data-v-1a06af44]{padding:clamp(34px,6vh,64px) 0 clamp(22px,3.5vh,34px);text-align:center}.welcome-intro h1[data-v-1a06af44]{max-width:none;margin:0 auto;color:#f3f3f5;font-size:clamp(20px,2.4vw,40px);line-height:1.1;letter-spacing:-.025em;white-space:nowrap}.welcome-intro h1 span[data-v-1a06af44]{color:#ff4e47}.welcome-intro p[data-v-1a06af44]{max-width:390px;margin:0 0 3px;color:#8c93a3;font-size:13px;line-height:1.75}.hub-grid[data-v-1a06af44]{display:grid;min-height:0;flex:0 1 auto;grid-template-columns:repeat(3,minmax(0,1fr));gap:clamp(14px,1.5vw,22px);width:min(100%,1540px);margin:0 auto}.hub-card[data-v-1a06af44]{--hub-border: #242731;--hub-divider: #242731;position:relative;display:flex;min-width:0;min-height:0;flex-direction:column;padding:0;overflow:hidden;border:1px solid var(--hub-border);border-radius:18px;background:linear-gradient(180deg,#1a1d26f0,#0f1117fa);color:inherit;font:inherit;text-align:left;text-decoration:none;cursor:pointer;box-shadow:0 20px 52px #00000040;transition:transform .18s ease,border-color .18s ease,box-shadow .18s ease}.hub-card[data-v-1a06af44]:hover{transform:translateY(-3px);border-color:var(--hub-border);box-shadow:0 25px 64px #00000061}.hub-card[data-v-1a06af44]:focus-visible{outline:2px solid #ff5b50;outline-offset:2px}.editor-card[data-v-1a06af44]:hover{--hub-border: #706bea}.viewer-card[data-v-1a06af44]:hover,.thumbnail-card[data-v-1a06af44]:hover{--hub-bordeLine truncated
+1327
View File
File diff suppressed because it is too large. Load diff
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 567 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 552 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 529 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 555 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 567 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 564 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 559 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 568 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 189 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 191 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 212 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

+63
View File
@@ -0,0 +1,63 @@
<svg xmlns="http://www.w3.org/2000/svg">
<symbol id="cn" viewBox="0 0 24 16">
<rect width="24" height="16" fill="#de2910"/>
<path fill="#ffde00" d="m5 2.2.7 2.1h2.2L6.1 5.6 6.8 7.7 5 6.4 3.2 7.7l.7-2.1-1.8-1.3h2.2z"/>
<circle cx="9" cy="2.6" r=".55" fill="#ffde00"/>
<circle cx="10.4" cy="4" r=".55" fill="#ffde00"/>
<circle cx="10.4" cy="5.8" r=".55" fill="#ffde00"/>
<circle cx="9" cy="7.2" r=".55" fill="#ffde00"/>
</symbol>
<symbol id="us" viewBox="0 0 24 16">
<rect width="24" height="16" fill="#fff"/>
<g fill="#b22234">
<path d="M0 0h24v1.23H0zm0 2.46h24v1.23H0zm0 2.46h24v1.23H0zm0 2.47h24v1.23H0zm0 2.46h24v1.23H0zm0 2.46h24v1.23H0zm0 2.46h24V16H0z"/>
</g>
<rect width="10" height="8.6" fill="#3c3b6e"/>
<g fill="#fff">
<circle cx="1.7" cy="1.5" r=".35"/><circle cx="4.2" cy="1.5" r=".35"/><circle cx="6.7" cy="1.5" r=".35"/><circle cx="9.2" cy="1.5" r=".35"/>
<circle cx="2.9" cy="2.9" r=".35"/><circle cx="5.4" cy="2.9" r=".35"/><circle cx="7.9" cy="2.9" r=".35"/>
<circle cx="1.7" cy="4.3" r=".35"/><circle cx="4.2" cy="4.3" r=".35"/><circle cx="6.7" cy="4.3" r=".35"/><circle cx="9.2" cy="4.3" r=".35"/>
<circle cx="2.9" cy="5.7" r=".35"/><circle cx="5.4" cy="5.7" r=".35"/><circle cx="7.9" cy="5.7" r=".35"/>
<circle cx="1.7" cy="7.1" r=".35"/><circle cx="4.2" cy="7.1" r=".35"/><circle cx="6.7" cy="7.1" r=".35"/><circle cx="9.2" cy="7.1" r=".35"/>
</g>
</symbol>
<symbol id="jp" viewBox="0 0 24 16">
<rect width="24" height="16" fill="#fff"/>
<circle cx="12" cy="8" r="4.4" fill="#bc002d"/>
</symbol>
<symbol id="kr" viewBox="0 0 24 16">
<rect width="24" height="16" fill="#fff"/>
<path d="M12 3.1a4.9 4.9 0 0 1 0 9.8 2.45 2.45 0 0 1 0-4.9A2.45 2.45 0 0 0 12 3.1z" fill="#cd2e3a"/>
<path d="M12 3.1a4.9 4.9 0 0 0 0 9.8 2.45 2.45 0 0 0 0-4.9 2.45 2.45 0 0 1 0-4.9z" fill="#0047a0"/>
<g fill="#111">
<path d="m3.6 3.7 3.2-1.8.45.8-3.2 1.8zm.8 1.4 3.2-1.8.45.8-3.2 1.8zm16-1.4 3.2 1.8-.45.8-3.2-1.8zm-.8 1.4 3.2 1.8-.45.8-3.2-1.8zM3.6 12.3l3.2 1.8-.45.8-3.2-1.8zm.8-1.4 3.2 1.8-.45.8-3.2-1.8zm16 1.4 3.2-1.8.45.8-3.2 1.8zm-.8-1.4 3.2-1.8.45.8-3.2 1.8z"/>
</g>
</symbol>
<symbol id="ru" viewBox="0 0 24 16">
<rect width="24" height="5.34" fill="#fff"/>
<rect y="5.34" width="24" height="5.33" fill="#0039a6"/>
<rect y="10.67" width="24" height="5.33" fill="#d52b1e"/>
</symbol>
<symbol id="fr" viewBox="0 0 24 16">
<rect width="8" height="16" fill="#0055a4"/>
<rect x="8" width="8" height="16" fill="#fff"/>
<rect x="16" width="8" height="16" fill="#ef4135"/>
</symbol>
<symbol id="de" viewBox="0 0 24 16">
<rect width="24" height="5.34" fill="#111"/>
<rect y="5.34" width="24" height="5.33" fill="#dd0000"/>
<rect y="10.67" width="24" height="5.33" fill="#ffce00"/>
</symbol>
<symbol id="br" viewBox="0 0 24 16">
<rect width="24" height="16" fill="#009c3b"/>
<path d="M12 2.1 22.2 8 12 13.9 1.8 8z" fill="#ffdf00"/>
<circle cx="12" cy="8" r="3.1" fill="#002776"/>
<path d="M9.2 7.1c1.7.8 4.1.6 5.7-.2" fill="none" stroke="#fff" stroke-width=".65"/>
</symbol>
<symbol id="es" viewBox="0 0 24 16">
<rect width="24" height="16" fill="#aa151b"/>
<rect y="3.4" width="24" height="9.2" fill="#f1bf00"/>
<rect x="6.5" y="6.3" width="2.1" height="3.5" rx=".4" fill="#aa151b"/>
<rect x="6.4" y="7.1" width="2.3" height=".6" fill="#f1bf00"/>
</symbol>
</svg>

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

+27 -14
View File
@@ -1,17 +1,30 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Spine粒子编辑器</title>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="icon" type="image/png" href="/favicon.png?v=2" sizes="256x256" />
<title>Spine粒子编辑器</title>
<style>
html, body { margin: 0; padding: 0; background: #111; color: #eee; font-family: system-ui, -apple-system, sans-serif; }
#app { display: flex; flex-direction: column; height: 100vh; }
</style>
<script type="module" crossorigin src="/assets/index-9ofazf7F.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-DCezqRpu.css">
</head>
<body>
<div id="app"></div>␍
</body>
</html>
</style>
<script type="module" crossorigin src="/assets/index-CqaZEMQp.js"></script>
<link rel="modulepreload" crossorigin href="/assets/vendor-fsmZiMPK.js">
<link rel="stylesheet" crossorigin href="/assets/index-DI0p1gIE.css">
<script>
var _paq = window._paq = window._paq || [];
_paq.push(['enableLinkTracking']);
(function() {
var u="//web-analysis.yeomai.site/";
_paq.push(['setTrackerUrl', u+'matomo.php']);
_paq.push(['setSiteId', '3']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
})();
</script>
</head>
<body>
<div id="app"></div>
</body>
</html>
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 88 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 MiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 267 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 99 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 630 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 526 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.5 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.3 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.5 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 183 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 KiB

BIN
View File
Binary file not shown.
+1
View File
@@ -3,6 +3,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="icon" type="image/png" href="/favicon.png?v=2" sizes="256x256" />
<title>Spine粒子编辑器</title>
<style>
html, body { margin: 0; padding: 0; background: #111; color: #eee; font-family: system-ui, -apple-system, sans-serif; }
+1535 -1
View File
File diff suppressed because it is too large. Load diff
+14 -2
View File
@@ -5,13 +5,23 @@
"type": "module",
"scripts": {
"dev": "vite",
"build": "vue-tsc -b && vite build",
"build": "vue-tsc -b && vite build && node scripts/obfuscate-build.mjs",
"connector": "node connector/spine-connector.mjs",
"build:connector": "node scripts/build-connector-app.mjs",
"build:connector:legacy-sea": "node scripts/build-connector-sea.mjs",
"test:loop-seam": "node scripts/verify-loop-seam.mjs",
"test:vortex": "node scripts/verify-vortex.mjs",
"test:timeline": "node scripts/verify-timeline.mjs",
"test:spine-json": "node scripts/verify-spine-json.mjs",
"test:spine-naming": "node scripts/verify-spine-naming.mjs",
"test:render-layer": "node scripts/verify-render-layer.mjs",
"test:particle-events": "node scripts/verify-particle-events.mjs",
"test:sub-emitter-timeline": "node scripts/verify-sub-emitter-timeline.mjs",
"test:sequence-defaults": "node scripts/verify-sequence-defaults.mjs",
"test:announcement": "node scripts/verify-announcement.mjs",
"test:export-timeline": "node scripts/verify-export-timeline.mjs",
"test:i18n": "node scripts/verify-i18n.mjs",
"i18n:generate": "node scripts/generate-i18n-locales.mjs && node scripts/apply-i18n-overrides.mjs",
"test:connector": "node scripts/verify-spine-connector.mjs",
"test:connector:spine38-path": "node scripts/verify-spine38-connector-path.mjs",
"test:connector:sea": "node scripts/verify-connector-sea.mjs",
@@ -25,11 +35,13 @@
"@spine-particle/spine-pixi-v7-4.3": "file:vendor/spine/spine-pixi-v7-4.3",
"pinia": "^4.0.3",
"pixi.js": "^7.4.3",
"vue": "^3.5.13"
"vue": "^3.5.13",
"vue-i18n": "^11.4.16"
},
"devDependencies": {
"@types/node": "^20.19.43",
"@vitejs/plugin-vue": "^5.2.1",
"javascript-obfuscator": "^5.9.0",
"typescript": "^5.7.2",
"vite": "^6.0.5",
"vue-tsc": "^2.2.0"
+555
View File
@@ -0,0 +1,555 @@
{
"format": "SpineParticle.EditorConfig",
"version": 1,
"savedAt": "2026-09-22T08:56:24.085Z",
"editor": {
"viewScale": 0.4038832279793692,
"viewX": 2.0968599067898026,
"viewY": 31.98633399960822
},
"settings": {
"backgroundX": 0,
"backgroundY": 0,
"backgroundOpacity": 1,
"backgroundImageName": "",
"backgroundImageData": "",
"showGrid": true,
"exportSettings": {
"imagesPath": "./images/",
"spineVersion": "4.2",
"keyframeCurve": "bezier",
"fps": 30,
"omitFps": false,
"integerFrameAlignment": true,
"bonePool": true,
"excludeEmptyAnimations": false,
"fileName": "SpineParticle.json"
}
},
"timeline": {
"fps": 30,
"loop": true,
"playbackStart": 0,
"playbackEnd": 50,
"animations": [
"animation"
]
},
"selection": {
"type": "particle",
"id": 1
},
"scene": {
"systems": [
{
"id": 1,
"visible": true,
"animation": "animation",
"config": {
"imageResources": [
{
"id": 2,
"textureName": "hj_glow_007",
"textureFolder": "",
"previewUrl": "data:image/png;base64,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 truncated
"imageMode": "fixed",
"sequencePlayback": "loop-forward",
"sequenceFps": 30,
"sequenceFrames": [],
"weight": 100,
"locked": false,
"scale": 1,
"anchorX": 0.5,
"anchorY": 0.5,
"colorMode": "fixed",
"colorStart": "#ffffff",
"colorEnd": "#ff4d4d",
"colorGradient": [
{
"position": 0,
"color": "#ffffff"
},
{
"position": 1,
"color": "#ff4d4d"
}
],
"blend": "add",
"independentAlpha": "off",
"alpha": 1,
"alphaCurveMode": "跟随导出",
"alphaCurve": [
{
"x": 0,
"y": 0
},
{
"x": 0.1,
"y": 1
},
{
"x": 0.9,
"y": 1
},
{
"x": 1,
"y": 0
}
]
}
],
"imageWeightVersion": 1,
"name": "ps_bg_light",
"mode": "stream",
"rate": 97,
"streamBehavior": "normal",
"loopDurationFrames": 30,
"generateLoopStartAnimation": false,
"loopStartUseCustomDuration": false,
"loopStartDurationFrames": 30,
"generateLoopEndAnimation": false,
"loopEndUseCustomDuration": false,
"loopEndDurationFrames": 30,
"burstCount": 50,
"burstLoop": false,
"delay": 0,
"duration": 0.6666666666666666,
"shape": "rect",
"shapeRangeVersion": 1,
"innerRadius": 0,
"outerRadius": 30,
"innerRectW": 0,
"innerRectH": 0,
"outerRectW": 750,
"outerRectH": 100,
"spawnPathId": 0,
"spawnPathDistribution": "fixed",
"radius": 30,
"rectW": 60,
"rectH": 40,
"centerX": 0,
"centerY": 0,
"rootRotation": 0,
"rootScaleX": 1,
"rootScaleY": 1,
"emissionAngleMode": "fixed",
"direction": -90,
"spread": 0,
"coneDirection": 90,
"coneAngle": 60,
"lifeMin": 0.3,
"lifeMax": 1,
"lifeMode": "random",
"lifeCurve": [
{
"x": 0,
"y": 0
},
{
"x": 1,
"y": 1
}
],
"speedMin": 30,
"speedMax": 140,
"speedMode": "random",
"speedCurve": [
{
"x": 0,
"y": 0
},
{
"x": 1,
"y": 1
}
],
"scaleMin": 0.3,
"scaleMax": 0.8,
"scaleMode": "random",
"scaleAxisMode": "uniform",
"scaleYMin": 0.3,
"scaleYMax": 0.8,
"scaleCurve": [
{
"x": 0,
"y": 0
},
{
"x": 1,
"y": 1
}
],
"scaleYCurve": [
{
"x": 0,
"y": 0
},
{
"x": 1,
"y": 1
}
],
"scaleEndRatio": 0.3,
"initialRotationMode": "fixed",
"initialRotationMin": 0,
"initialRotationMax": 360,
"initialRotationCurve": [
{
"x": 0,
"y": 0
},
{
"x": 1,
"y": 1
}
],
"alpha": 0.9,
"alphaEnd": 0,
"rotationSpeedMin": -180,
"rotationSpeedMax": 180,
"speedOverLifeEnabled": true,
"speedOverLifeMode": "random",
"speedOverLifeMin": 0.5,
"speedOverLifeMax": 3,
"speedOverLifeCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"scaleOverLifeEnabled": true,
"scaleOverLifeMode": "random",
"scaleOverLifeAxisMode": "separate",
"scaleOverLifeMin": 0.1,
"scaleOverLifeMax": 1,
"scaleYOverLifeMin": 1,
"scaleYOverLifeMax": 1,
"scaleOverLifeCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"scaleYOverLifeCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"rotationOverLifeEnabled": false,
"rotationOverLifeMode": "random",
"rotationOverLifeCurve": [
{
"x": 0,
"y": 0
},
{
"x": 1,
"y": 1
}
],
"gravity": 980,
"gravityMode": "fixed",
"gravityMin": 980,
"gravityMax": 980,
"gravityDirection": -90,
"gravityCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"damping": 0,
"seed": 500066,
"colorStart": "#ffffff",
"colorEnd": "#ff4d4d",
"colorOverLife": false,
"blend": "add",
"alphaMode": "curve",
"curveMode": "线性",
"alphaCurve": [
{
"x": 0,
"y": 0
},
{
"x": 0.11,
"y": 1
},
{
"x": 0.86,
"y": 1
},
{
"x": 1,
"y": 0
}
],
"textureName": "star",
"textureFolder": "",
"alphaScale": 1,
"anchorX": 0.5,
"anchorY": 0.5,
"independentAlpha": "off",
"offsetX": 0,
"offsetY": 0,
"noise": false,
"noiseAmt": 30,
"noiseRange": 100,
"noiseSpeed": 1,
"useGravity": false,
"wind": false,
"windX": 0,
"windY": 0,
"windMode": "fixed",
"windMin": 100,
"windMax": 100,
"windDirection": 0,
"windCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"forceField": false,
"forceStrength": 10,
"forceRadius": 100,
"forceCenterX": 0,
"forceCenterY": 0,
"forceFalloff": "linear",
"attraction": false,
"attractionCenterX": 200,
"attractionCenterY": 0,
"attractionRadius": 20,
"attractionDuration": 0.5,
"attractionDelay": 0.1,
"attractionDelayMode": "particle",
"attractionPath": "curve",
"trail": false,
"trailConfigVersion": 3,
"trailResources": [
{
"id": 1,
"textureName": "trail",
"previewUrl": "/images/trail.png",
"weight": 100,
"locked": false,
"rotation": 0,
"colorMode": "particle",
"color": "#ffffff",
"colorGradient": [
{
"position": 0,
"color": "#ffffff"
},
{
"position": 1,
"color": "#ffffff"
}
],
"blend": "normal",
"alphaMode": "particle",
"alpha": 1,
"alphaCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"boneCount": 3,
"trailRatio": 100,
"lengthMode": "fixed",
"length": 100,
"lengthMin": 100,
"lengthMax": 100,
"widthSizeMode": "fixed",
"width": 100,
"widthMin": 100,
"widthMax": 100,
"widthMode": "particle",
"lifeLengthEnabled": false,
"lifeLengthCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"shapeEnabled": false,
"shapeCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
]
}
],
"trailResourceVersion": 6,
"trailTextureName": "trail",
"trailPreviewUrl": "/images/trail.png",
"trailColorMode": "particle",
"trailColor": "#ffffff",
"trailColorGradient": [
{
"position": 0,
"color": "#ffffff"
},
{
"position": 1,
"color": "#ffffff"
}
],
"trailAlphaMode": "particle",
"trailAlpha": 1,
"trailAlphaCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"trailBoneCount": 3,
"trailLength": 100,
"trailWidth": 100,
"trailWidthMode": "particle",
"trailLifeLengthEnabled": false,
"trailLifeLengthCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"trailShapeEnabled": false,
"trailShapeCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"trailGridRows": 4,
"trailGridCols": 4,
"collision": false,
"collisionColliderIds": [],
"pathFollow": false,
"emitterFollow": true,
"emitterFollowMode": "path",
"emitterFollowPathId": 1,
"emitterFollowSpineId": 0,
"emitterFollowBoneName": "",
"emitterFollowBoneOffsetX": 0,
"emitterFollowBoneOffsetY": 0,
"emitterFollowBoneRotation": 0,
"emitterFollowBoneScaleX": 1,
"emitterFollowBoneScaleY": 1,
"emitterAngleMode": "fixed",
"emitterFollowCurve": [
{
"x": 0,
"y": 0
},
{
"x": 0.78,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"emitterFollowDuration": 1,
"emitterFollowSpace": "world",
"emitterFollowDirection": "forward",
"emitterFollowOffset": 0,
"showShape": false,
"showForceFieldShape": true,
"vortex": false,
"vortexStrength": 10,
"vortexRadius": 100,
"vortexCenterX": 0,
"vortexCenterY": 0,
"vortexFalloff": "linear",
"showVortexShape": true,
"showAttractionShape": true
}
}
],
"colliders": [],
"paths": [
{
"id": 1,
"name": "Path1",
"visible": false,
"enabled": true,
"x": 0,
"y": 0,
"rotation": 0,
"scaleX": 1,
"scaleY": 1,
"closed": false,
"color": "#ff933e",
"preset": "",
"points": [
{
"x": -9.844587796380674,
"y": 535.2388041882431,
"inX": 0,
"inY": 0,
"outX": 0,
"outY": 0
},
{
"x": 1.2088192406497293,
"y": -379.98329847787426,
"inX": 0,
"inY": 0,
"outX": 0,
"outY": 0
}
]
}
],
"spines": []
}
}
+526
View File
@@ -0,0 +1,526 @@
{
"format": "SpineParticle.EditorConfig",
"version": 1,
"savedAt": "2026-09-22T08:55:50.419Z",
"editor": {
"viewScale": 0.892857142857143,
"viewX": 11.598706236326507,
"viewY": 20.938181871950917
},
"settings": {
"backgroundX": 0,
"backgroundY": 0,
"backgroundOpacity": 1,
"backgroundImageName": "",
"backgroundImageData": "",
"showGrid": true,
"exportSettings": {
"imagesPath": "./images/",
"spineVersion": "4.2",
"keyframeCurve": "linear",
"fps": 30,
"omitFps": false,
"integerFrameAlignment": true,
"bonePool": true,
"excludeEmptyAnimations": false,
"fileName": "SpineParticle.json"
}
},
"timeline": {
"fps": 30,
"loop": true,
"playbackStart": 30,
"playbackEnd": 90,
"animations": [
"animation"
]
},
"selection": {
"type": "particle",
"id": 1
},
"scene": {
"systems": [
{
"id": 1,
"visible": true,
"animation": "animation",
"config": {
"imageResources": [
{
"id": 1,
"textureName": "fangkuai",
"textureFolder": "",
"previewUrl": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAALCAYAAABGbhwYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3BpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDkuMS1jMDAzIDc5Ljk2OTBhODdmYywgMjAyNS8wMy8wNi0yMDo1MDoxNiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpiYjU2OTA5Mi1hMDcxLTQ5OGEtOWI2ZC03MWM5NzM1MzcxNGIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NzlFMTgxMjdBQjY0MTFGMTkyNzBGQkVBQzczRDRDMDYiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NzlFMTgxMjZBQjY0MTFGMTkyNzBGQkVBQzczRDRDMDYiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDI3LjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoxNkE1NzlGNUFCNjMxMUYxOTI3MEZCRUFDNzNENEMwNiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoxNkE1NzlGNkFCNjMxMUYxOTI3MEZCRUFDNzNENEMwNiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pg86PbEAAAAtSURBVHjaYvz//38CAwMDGwN+8IURqPADkMFPQOEjJgYiwahCvICR2JgBCDAArewNoImb6KUAAAAASUVORK5CYII=",
"imageMode": "fixed",
"sequencePlayback": "loop-forward",
"sequenceFps": 30,
"sequenceFrames": [],
"weight": 100,
"locked": false,
"scale": 1,
"anchorX": 0.5,
"anchorY": 0.5,
"colorMode": "random",
"colorStart": "#ffffff",
"colorEnd": "#ff4d4d",
"colorGradient": [
{
"position": 0,
"color": "#ffffff"
},
{
"position": 1,
"color": "#ffd500"
},
{
"position": 0.27424823113207547,
"color": "#ffffff"
}
],
"blend": "normal",
"independentAlpha": "off",
"alpha": 1,
"alphaCurveMode": "跟随导出",
"alphaCurve": [
{
"x": 0,
"y": 0
},
{
"x": 0.1,
"y": 1
},
{
"x": 0.9,
"y": 1
},
{
"x": 1,
"y": 0
}
]
}
],
"imageWeightVersion": 1,
"name": "ParticleSystem1",
"mode": "stream",
"rate": 40,
"streamBehavior": "loop",
"loopDurationFrames": 60,
"generateLoopStartAnimation": true,
"loopStartUseCustomDuration": true,
"loopStartDurationFrames": 30,
"generateLoopEndAnimation": false,
"loopEndUseCustomDuration": false,
"loopEndDurationFrames": 30,
"burstCount": 50,
"burstLoop": false,
"delay": 0,
"duration": 1,
"shape": "rect",
"shapeRangeVersion": 1,
"innerRadius": 0,
"outerRadius": 20,
"innerRectW": 0,
"innerRectH": 0,
"outerRectW": 800,
"outerRectH": 36,
"spawnPathId": 0,
"spawnPathDistribution": "fixed",
"radius": 30,
"rectW": 60,
"rectH": 40,
"centerX": 0,
"centerY": 0,
"rootRotation": 0,
"rootScaleX": 1,
"rootScaleY": 1,
"emissionAngleMode": "radial",
"direction": -90,
"spread": 0,
"coneDirection": 90,
"coneAngle": 60,
"lifeMin": 0.6,
"lifeMax": 1.5,
"lifeMode": "random",
"lifeCurve": [
{
"x": 0,
"y": 0
},
{
"x": 1,
"y": 1
}
],
"speedMin": 30,
"speedMax": 140,
"speedMode": "random",
"speedCurve": [
{
"x": 0,
"y": 0
},
{
"x": 1,
"y": 1
}
],
"scaleMin": 0.3,
"scaleMax": 1,
"scaleMode": "random",
"scaleAxisMode": "uniform",
"scaleYMin": 0.3,
"scaleYMax": 0.8,
"scaleCurve": [
{
"x": 0,
"y": 0
},
{
"x": 1,
"y": 1
}
],
"scaleYCurve": [
{
"x": 0,
"y": 0
},
{
"x": 1,
"y": 1
}
],
"scaleEndRatio": 0.3,
"initialRotationMode": "fixed",
"initialRotationMin": 0,
"initialRotationMax": 360,
"initialRotationCurve": [
{
"x": 0,
"y": 0
},
{
"x": 1,
"y": 1
}
],
"alpha": 0.9,
"alphaEnd": 0,
"rotationSpeedMin": -180,
"rotationSpeedMax": 180,
"speedOverLifeEnabled": false,
"speedOverLifeMode": "fixed",
"speedOverLifeMin": 1,
"speedOverLifeMax": 1,
"speedOverLifeCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"scaleOverLifeEnabled": true,
"scaleOverLifeMode": "curve",
"scaleOverLifeAxisMode": "uniform",
"scaleOverLifeMin": 0,
"scaleOverLifeMax": 1,
"scaleYOverLifeMin": 0,
"scaleYOverLifeMax": 1,
"scaleOverLifeCurve": [
{
"x": 0,
"y": 1
},
{
"x": 0.79,
"y": 1
},
{
"x": 1,
"y": 0
}
],
"scaleYOverLifeCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"rotationOverLifeEnabled": false,
"rotationOverLifeMode": "random",
"rotationOverLifeCurve": [
{
"x": 0,
"y": 0
},
{
"x": 1,
"y": 1
}
],
"gravity": 980,
"gravityMode": "fixed",
"gravityMin": 980,
"gravityMax": 980,
"gravityDirection": -90,
"gravityCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"damping": 1,
"seed": 0,
"colorStart": "#ffffff",
"colorEnd": "#ff4d4d",
"colorOverLife": false,
"blend": "add",
"alphaMode": "curve",
"curveMode": "线性",
"alphaCurve": [
{
"x": 0,
"y": 0
},
{
"x": 0.2,
"y": 1
},
{
"x": 0.8,
"y": 1
},
{
"x": 1,
"y": 0
}
],
"textureName": "star",
"textureFolder": "",
"alphaScale": 1,
"anchorX": 0.5,
"anchorY": 0.5,
"independentAlpha": "off",
"offsetX": 0,
"offsetY": 0,
"noise": false,
"noiseAmt": 30,
"noiseRange": 100,
"noiseSpeed": 1,
"useGravity": false,
"wind": false,
"windX": 0,
"windY": 0,
"windMode": "fixed",
"windMin": 100,
"windMax": 100,
"windDirection": 0,
"windCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"forceField": false,
"forceStrength": 10,
"forceRadius": 100,
"forceCenterX": 0,
"forceCenterY": 0,
"forceFalloff": "linear",
"attraction": false,
"attractionCenterX": 200,
"attractionCenterY": 0,
"attractionRadius": 20,
"attractionDuration": 0.5,
"attractionDelay": 0.1,
"attractionDelayMode": "particle",
"attractionPath": "curve",
"trail": false,
"trailConfigVersion": 3,
"trailResources": [
{
"id": 1,
"textureName": "trail",
"previewUrl": "/images/trail.png",
"weight": 100,
"locked": false,
"rotation": 0,
"colorMode": "particle",
"color": "#ffffff",
"colorGradient": [
{
"position": 0,
"color": "#ffffff"
},
{
"position": 1,
"color": "#ffffff"
}
],
"blend": "normal",
"alphaMode": "particle",
"alpha": 1,
"alphaCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"boneCount": 3,
"trailRatio": 100,
"lengthMode": "fixed",
"length": 100,
"lengthMin": 100,
"lengthMax": 100,
"widthSizeMode": "fixed",
"width": 100,
"widthMin": 100,
"widthMax": 100,
"widthMode": "particle",
"lifeLengthEnabled": false,
"lifeLengthCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"shapeEnabled": false,
"shapeCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
]
}
],
"trailResourceVersion": 6,
"trailTextureName": "trail",
"trailPreviewUrl": "/images/trail.png",
"trailColorMode": "particle",
"trailColor": "#ffffff",
"trailColorGradient": [
{
"position": 0,
"color": "#ffffff"
},
{
"position": 1,
"color": "#ffffff"
}
],
"trailAlphaMode": "particle",
"trailAlpha": 1,
"trailAlphaCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"trailBoneCount": 3,
"trailLength": 100,
"trailWidth": 100,
"trailWidthMode": "particle",
"trailLifeLengthEnabled": false,
"trailLifeLengthCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"trailShapeEnabled": false,
"trailShapeCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"trailGridRows": 4,
"trailGridCols": 4,
"collision": false,
"collisionColliderIds": [],
"pathFollow": false,
"emitterFollow": false,
"emitterFollowMode": "none",
"emitterFollowPathId": 0,
"emitterFollowSpineId": 0,
"emitterFollowBoneName": "",
"emitterFollowBoneOffsetX": 0,
"emitterFollowBoneOffsetY": 0,
"emitterFollowBoneRotation": 0,
"emitterFollowBoneScaleX": 1,
"emitterFollowBoneScaleY": 1,
"emitterAngleMode": "fixed",
"emitterFollowCurve": [
{
"x": 0,
"y": 0
},
{
"x": 1,
"y": 1
}
],
"emitterFollowDuration": 2,
"emitterFollowSpace": "world",
"emitterFollowDirection": "forward",
"emitterFollowOffset": 0,
"showShape": false,
"showForceFieldShape": true,
"vortex": false,
"vortexStrength": 10,
"vortexRadius": 100,
"vortexCenterX": 0,
"vortexCenterY": 0,
"vortexFalloff": "linear",
"showVortexShape": true,
"showAttractionShape": true
}
}
],
"colliders": [],
"paths": [],
"spines": []
}
}
+530
View File
@@ -0,0 +1,530 @@
{
"format": "SpineParticle.EditorConfig",
"version": 1,
"savedAt": "2026-09-22T09:13:58.532Z",
"editor": {
"viewScale": 1.4049280000000024,
"viewX": 4.425329339374599,
"viewY": -0.7737096708491435
},
"settings": {
"backgroundX": 0,
"backgroundY": 0,
"backgroundOpacity": 1,
"backgroundImageName": "",
"backgroundImageData": "",
"showGrid": true,
"exportSettings": {
"imagesPath": "./images/",
"spineVersion": "4.2",
"keyframeCurve": "bezier",
"fps": 30,
"omitFps": false,
"integerFrameAlignment": true,
"bonePool": true,
"excludeEmptyAnimations": false,
"fileName": "SpineParticle.json"
}
},
"timeline": {
"fps": 30,
"loop": true,
"playbackStart": 0,
"playbackEnd": 90,
"animations": [
"animation"
]
},
"selection": {
"type": "particle",
"id": 1
},
"scene": {
"systems": [
{
"id": 1,
"visible": true,
"animation": "animation",
"config": {
"imageResources": [
{
"id": 1,
"textureName": "star",
"textureFolder": "",
"previewUrl": "/images/star.png",
"imageMode": "fixed",
"sequencePlayback": "loop-forward",
"sequenceFps": 30,
"sequenceFrames": [],
"weight": 100,
"locked": false,
"scale": 1,
"anchorX": 0.5,
"anchorY": 0.5,
"colorMode": "random",
"colorStart": "#ffffff",
"colorEnd": "#ff4d4d",
"colorGradient": [
{
"position": 0,
"color": "#ffffff"
},
{
"position": 1,
"color": "#ff4d4d"
},
{
"position": 0.5,
"color": "#00e1ff"
},
{
"position": 0.25,
"color": "#ffae00"
},
{
"position": 0.75,
"color": "#c800ff"
}
],
"blend": "add",
"independentAlpha": "off",
"alpha": 1,
"alphaCurveMode": "跟随导出",
"alphaCurve": [
{
"x": 0,
"y": 0
},
{
"x": 0.1,
"y": 1
},
{
"x": 0.9,
"y": 1
},
{
"x": 1,
"y": 0
}
]
}
],
"imageWeightVersion": 1,
"name": "lizi",
"mode": "burst",
"rate": 5,
"streamBehavior": "loop",
"loopDurationFrames": 120,
"generateLoopStartAnimation": false,
"loopStartUseCustomDuration": false,
"loopStartDurationFrames": 30,
"generateLoopEndAnimation": false,
"loopEndUseCustomDuration": false,
"loopEndDurationFrames": 30,
"burstCount": 50,
"burstLoop": false,
"delay": 0,
"duration": 1,
"shape": "circle",
"showShape": false,
"shapeRangeVersion": 1,
"innerRadius": 150,
"outerRadius": 150,
"innerRectW": 0,
"innerRectH": 0,
"outerRectW": 60,
"outerRectH": 40,
"spawnPathId": 0,
"spawnPathDistribution": "fixed",
"radius": 30,
"rectW": 60,
"rectH": 40,
"centerX": 0,
"centerY": 0,
"rootRotation": 0,
"rootScaleX": 1,
"rootScaleY": 1,
"emissionAngleMode": "radial",
"direction": -90,
"spread": 0,
"coneDirection": 90,
"coneAngle": 60,
"lifeMin": 3,
"lifeMax": 3,
"lifeMode": "fixed",
"lifeCurve": [
{
"x": 0,
"y": 0
},
{
"x": 1,
"y": 1
}
],
"speedMin": 0,
"speedMax": 0,
"speedMode": "fixed",
"speedCurve": [
{
"x": 0,
"y": 0
},
{
"x": 1,
"y": 1
}
],
"scaleMin": 0.2,
"scaleMax": 0.6,
"scaleMode": "random",
"scaleAxisMode": "uniform",
"scaleYMin": 0.3,
"scaleYMax": 0.8,
"scaleCurve": [
{
"x": 0,
"y": 0
},
{
"x": 1,
"y": 1
}
],
"scaleYCurve": [
{
"x": 0,
"y": 0
},
{
"x": 1,
"y": 1
}
],
"scaleEndRatio": 0.3,
"initialRotationMode": "random",
"initialRotationMin": 0,
"initialRotationMax": 360,
"initialRotationCurve": [
{
"x": 0,
"y": 0
},
{
"x": 1,
"y": 1
}
],
"alpha": 1,
"alphaEnd": 0,
"rotationSpeedMin": 360,
"rotationSpeedMax": 720,
"speedOverLifeEnabled": false,
"speedOverLifeMode": "fixed",
"speedOverLifeMin": 1,
"speedOverLifeMax": 1,
"speedOverLifeCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"scaleOverLifeEnabled": false,
"scaleOverLifeMode": "curve",
"scaleOverLifeAxisMode": "uniform",
"scaleOverLifeMin": 0,
"scaleOverLifeMax": 1,
"scaleYOverLifeMin": 0,
"scaleYOverLifeMax": 1,
"scaleOverLifeCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"scaleYOverLifeCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"rotationOverLifeEnabled": true,
"rotationOverLifeMode": "random",
"rotationOverLifeCurve": [
{
"x": 0,
"y": 0
},
{
"x": 1,
"y": 1
}
],
"gravity": 980,
"gravityMode": "fixed",
"gravityMin": 980,
"gravityMax": 980,
"gravityDirection": -90,
"gravityCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"damping": 0.6,
"seed": 457291,
"colorStart": "#ffffff",
"colorEnd": "#ff4d4d",
"colorOverLife": false,
"blend": "add",
"alphaMode": "curve",
"curveMode": "线性",
"alphaCurve": [
{
"x": 0,
"y": 0
},
{
"x": 0.1,
"y": 1
},
{
"x": 0.91,
"y": 1
},
{
"x": 1,
"y": 0
}
],
"textureName": "star",
"textureFolder": "",
"alphaScale": 1,
"anchorX": 0.5,
"anchorY": 0.5,
"independentAlpha": "off",
"offsetX": 0,
"offsetY": 0,
"noise": true,
"noiseAmt": 10,
"noiseRange": 100,
"noiseSpeed": 1,
"useGravity": false,
"wind": false,
"windX": 0,
"windY": 0,
"windMode": "fixed",
"windMin": 100,
"windMax": 100,
"windDirection": 0,
"windCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"forceField": true,
"forceStrength": 20,
"forceRadius": 300,
"forceCenterX": 0,
"forceCenterY": 0,
"forceFalloff": "constant",
"vortex": true,
"vortexStrength": 10,
"vortexRadius": 300,
"vortexCenterX": 0,
"vortexCenterY": 0,
"vortexFalloff": "constant",
"attraction": false,
"attractionCenterX": 200,
"attractionCenterY": 0,
"attractionRadius": 20,
"attractionDuration": 0.5,
"attractionDelay": 0.1,
"attractionDelayMode": "particle",
"attractionPath": "curve",
"trail": true,
"trailConfigVersion": 3,
"trailResources": [
{
"id": 1,
"textureName": "trail",
"previewUrl": "/images/trail.png",
"weight": 100,
"locked": false,
"rotation": 0,
"colorMode": "particle",
"color": "#ffffff",
"colorGradient": [
{
"position": 0,
"color": "#ffffff"
},
{
"position": 1,
"color": "#ffffff"
}
],
"blend": "normal",
"alphaMode": "particle",
"alpha": 1,
"alphaCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"boneCount": 6,
"trailRatio": 100,
"lengthMode": "fixed",
"length": 100,
"lengthMin": 100,
"lengthMax": 100,
"widthSizeMode": "fixed",
"width": 10,
"widthMin": 100,
"widthMax": 100,
"widthMode": "particle",
"lifeLengthEnabled": false,
"lifeLengthCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"shapeEnabled": false,
"shapeCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
]
}
],
"trailResourceVersion": 6,
"trailTextureName": "trail",
"trailPreviewUrl": "/images/trail.png",
"trailColorMode": "particle",
"trailColor": "#ffffff",
"trailColorGradient": [
{
"position": 0,
"color": "#ffffff"
},
{
"position": 1,
"color": "#ffffff"
}
],
"trailAlphaMode": "particle",
"trailAlpha": 1,
"trailAlphaCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"trailBoneCount": 3,
"trailLength": 100,
"trailWidth": 100,
"trailWidthMode": "particle",
"trailLifeLengthEnabled": false,
"trailLifeLengthCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"trailShapeEnabled": false,
"trailShapeCurve": [
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
}
],
"trailGridRows": 2,
"trailGridCols": 12,
"collision": false,
"collisionColliderIds": [],
"pathFollow": false,
"emitterFollow": false,
"emitterFollowMode": "none",
"emitterFollowPathId": 0,
"emitterFollowSpineId": 0,
"emitterFollowBoneName": "",
"emitterFollowBoneOffsetX": 0,
"emitterFollowBoneOffsetY": 0,
"emitterFollowBoneRotation": 0,
"emitterFollowBoneScaleX": 1,
"emitterFollowBoneScaleY": 1,
"emitterAngleMode": "fixed",
"emitterFollowCurve": [
{
"x": 0,
"y": 0
},
{
"x": 1,
"y": 1
}
],
"emitterFollowDuration": 2,
"emitterFollowSpace": "world",
"emitterFollowDirection": "forward",
"emitterFollowOffset": 0,
"showForceFieldShape": false,
"showVortexShape": false,
"showAttractionShape": true
}
}
],
"colliders": [],
"paths": [],
"spines": []
}
}
File renamed without changes.
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
Loaded 100 of 299 files, more files were not shown because too many files have changed in this diff. Show more