Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
98f44890f8 | ||
|
|
97e6713cfd | ||
|
|
e626e685fc | ||
|
|
b3e9481fe5 | ||
|
|
98e5c435c8 | ||
|
|
8977463861 | ||
|
|
517e92a00b | ||
|
|
87d6561779 | ||
|
|
720e3e0ceb | ||
|
|
753e3b1e21 | ||
|
|
ab32146e8d | ||
|
|
a11d57f27f | ||
|
|
5efee6d918 | ||
|
|
7062a60c73 | ||
|
|
bae179eb93 | ||
|
|
fed1015849 | ||
|
|
b8652acce0 | ||
|
|
ca719ba1d4 | ||
|
|
859c78173a | ||
|
|
c93ec671da | ||
|
|
5f7e30063b | ||
|
|
67bf3921cc | ||
|
|
0f578d29a4 | ||
|
|
7069b168de | ||
|
|
a417c9119d | ||
|
|
cffbd49eff | ||
|
|
46083c8d2a | ||
|
|
8bd9154414 | ||
|
|
04de5e5a8e | ||
|
|
b98c0333e6 | ||
|
|
ea26af26ee | ||
|
|
5d12bf895b | ||
|
|
d224939efd | ||
|
|
d4ebb18777 | ||
|
|
2b8fd067b3 | ||
|
|
4d54c87681 | ||
|
|
c041503004 | ||
|
|
aabf4ff693 | ||
|
|
1ecbb6fc48 | ||
|
|
61b93f590c | ||
|
|
7745f0de1b | ||
|
|
2ba2b9c08a | ||
|
|
0f08224e1c | ||
|
|
d6232c9d66 | ||
|
|
f249c019bc | ||
|
|
f54e90c21a | ||
|
|
abb4ac4acc | ||
|
|
4f2c980bac | ||
|
|
5f3a4a33fe | ||
|
|
3f2699a946 | ||
|
|
aadcf5cbcf | ||
|
|
bf78477a66 | ||
|
|
d629443ac1 | ||
|
|
32a594dd8a | ||
|
|
6de6e2cf5b | ||
|
|
ee72d09b23 | ||
|
|
8bf16fe09f | ||
|
|
83890faaea | ||
|
|
f810e712ec | ||
|
|
8ab3672c4e |
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 骨骼、插槽与关键帧数据。
|
||||
@@ -0,0 +1,60 @@
|
||||
# 浏览器配置库说明
|
||||
|
||||
## 存储方式
|
||||
|
||||
浏览器配置库使用 IndexedDB,不占用 `localStorage`。
|
||||
|
||||
数据库:
|
||||
|
||||
```text
|
||||
SpineParticle.ProjectLibrary
|
||||
```
|
||||
|
||||
对象仓库:
|
||||
|
||||
```text
|
||||
projects
|
||||
```
|
||||
|
||||
每条配置保存:
|
||||
|
||||
- 用户输入的名称;
|
||||
- 完整编辑器配置 JSON;
|
||||
- 保存时间;
|
||||
- 文件大小。
|
||||
|
||||
实现位置:
|
||||
|
||||
```text
|
||||
src/editor/projectLibrary.ts
|
||||
```
|
||||
|
||||
## 保存
|
||||
|
||||
点击“保存配置”只打开命名弹窗并写入浏览器,不会下载文件。
|
||||
|
||||
同名配置已存在时会询问是否覆盖。
|
||||
|
||||
## 加载
|
||||
|
||||
点击列表中的“加载”后,会先提示:
|
||||
|
||||
```text
|
||||
加载后会覆盖当前场景,未保存的修改将丢失。
|
||||
```
|
||||
|
||||
用户确认后才恢复配置。
|
||||
|
||||
## 下载
|
||||
|
||||
- “下载当前配置”直接导出当前场景,不需要先保存到列表。
|
||||
- 单条“下载”导出对应配置的 `.json` 文件。
|
||||
- “下载所有配置”将列表中全部配置打包为 ZIP。
|
||||
- 下载不会加载或覆盖当前场景。
|
||||
|
||||
## 限制
|
||||
|
||||
- IndexedDB 数据属于当前网站域名和当前浏览器。
|
||||
- 清理浏览器数据、隐私模式或系统空间不足可能移除配置。
|
||||
- 不同浏览器和设备之间不会同步。
|
||||
- 下载到磁盘的文件仍应作为正式备份。
|
||||
@@ -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 单粒子单骨骼原则
|
||||
|
||||
|
||||
@@ -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 生产链路完善”完成落盘。
|
||||
@@ -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
|
||||
```
|
||||
|
||||
该命令会检查:
|
||||
|
||||
- 每个预设文件是否存在;
|
||||
- 多语言名称字段格式是否有效;
|
||||
- 语言包键和插值占位符是否一致。
|
||||
@@ -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/`,应能看到编辑器界面。
|
||||
@@ -17,5 +17,5 @@
|
||||
## 分发说明
|
||||
|
||||
- macOS 请完整分发 `.app`;Windows 可直接分发 `.exe` 和本说明。
|
||||
- macOS 版本只适用于其标记的 CPU 架构(Apple Silicon 或 Intel)。Windows 版本也需在 Windows 上构建。
|
||||
- macOS Universal 2 版本同时支持 Apple Silicon 与 Intel Mac,最低系统版本为 macOS 11.0。Windows 版本仍需在 Windows 上构建。
|
||||
- 面向其他 Mac 分发时,建议使用 Apple Developer ID 签名并公证,避免 Gatekeeper 提示。
|
||||
@@ -68,6 +68,6 @@ npm run connector
|
||||
npm run build:connector
|
||||
```
|
||||
|
||||
macOS 会生成 `release/connector/macos-<架构>/Spine粒子连接器.app`;Windows 会生成 `release/connector/windows-<架构>/Spine粒子连接器.exe`。桌面程序由 C++17 编写,运行时不依赖 Node.js。默认使用 macOS 的 Apple Clang;Windows 应在 Visual Studio Developer Command Prompt 中执行,默认使用 MSVC,也可通过 `CXX` 指定 MinGW g++。
|
||||
macOS 会生成 `release/connector/macos-universal/Spine粒子连接器.app`,同时支持 Apple Silicon 与 Intel Mac,最低系统版本为 macOS 11.0;Windows 会生成 `release/connector/windows-<架构>/Spine粒子连接器.exe`。桌面程序由 C++17 编写,运行时不依赖 Node.js。默认使用 macOS 的 Apple Clang;Windows 应在 Visual Studio Developer Command Prompt 中执行,默认使用 MSVC,也可通过 `CXX` 指定 MinGW g++。
|
||||
|
||||
面向其他 Mac 正式分发时,建议使用 Apple Developer ID 对 `.app` 签名并公证,避免 Gatekeeper 提示。
|
||||
@@ -79,13 +79,15 @@ using connector::ConnectorService;
|
||||
|
||||
- (void)refreshStatus:(id)sender {
|
||||
(void)sender;
|
||||
self.connectionButton.title = self.service && self.service->running() ? @"断开连接" : @"启动连接";
|
||||
if (self.startupError.length > 0) {
|
||||
const BOOL ownsPort = self.service && self.service->running();
|
||||
const BOOL portOccupied = ownsPort || connector::connector_port_in_use();
|
||||
self.connectionButton.title = portOccupied ? @"停止连接" : @"启动连接";
|
||||
if (self.startupError.length > 0 && !portOccupied) {
|
||||
self.statusLabel.stringValue = [@"● 连接器未启动 · " stringByAppendingString:self.startupError];
|
||||
self.statusLabel.textColor = NSColor.systemRedColor;
|
||||
return;
|
||||
}
|
||||
if (!self.service || !self.service->running()) {
|
||||
if (!portOccupied) {
|
||||
self.statusLabel.stringValue = @"● 连接器已断开";
|
||||
self.statusLabel.textColor = NSColor.secondaryLabelColor;
|
||||
return;
|
||||
@@ -93,6 +95,11 @@ using connector::ConnectorService;
|
||||
const std::string spine = connector::find_spine_executable();
|
||||
const BOOL showPathControls = spine.empty();
|
||||
for (NSView* view in self.pathControls) view.hidden = !showPathControls;
|
||||
if (!ownsPort) {
|
||||
self.statusLabel.stringValue = @"● 端口 27843 正在运行 · 可停止连接";
|
||||
self.statusLabel.textColor = NSColor.systemGreenColor;
|
||||
return;
|
||||
}
|
||||
self.statusLabel.stringValue = spine.empty() ? @"● 连接器运行中 · 未找到 Spine" : @"● 连接器运行中 · Spine 已就绪";
|
||||
self.statusLabel.textColor = spine.empty() ? NSColor.systemOrangeColor : NSColor.systemGreenColor;
|
||||
}
|
||||
@@ -102,6 +109,10 @@ using connector::ConnectorService;
|
||||
if (self.service && self.service->running()) {
|
||||
self.service->stop();
|
||||
self.startupError = @"";
|
||||
} else if (connector::connector_port_in_use()) {
|
||||
std::string error;
|
||||
connector::stop_connector_port(error);
|
||||
self.startupError = [NSString stringWithUTF8String:error.c_str()];
|
||||
} else if (self.service) {
|
||||
std::string error;
|
||||
self.service->start(error);
|
||||
|
||||
@@ -141,13 +141,18 @@ std::wstring field_text(HWND field) {
|
||||
}
|
||||
|
||||
void refresh_status() {
|
||||
const bool owns_port = service.running();
|
||||
const bool port_occupied = owns_port || connector::connector_port_in_use();
|
||||
std::wstring status;
|
||||
if (!startup_error.empty()) {
|
||||
if (!startup_error.empty() && !port_occupied) {
|
||||
status = L"● 连接器未启动 · " + wide(startup_error);
|
||||
status_color = kErrorText;
|
||||
} else if (!service.running()) {
|
||||
} else if (!port_occupied) {
|
||||
status = L"● 连接器已断开";
|
||||
status_color = kSecondaryText;
|
||||
} else if (!owns_port) {
|
||||
status = L"● 端口 27843 正在运行 · 可停止连接";
|
||||
status_color = kSuccessText;
|
||||
} else if (connector::find_spine_executable().empty()) {
|
||||
status = L"● 连接器运行中 · 未找到 Spine";
|
||||
status_color = kWarningText;
|
||||
@@ -157,7 +162,7 @@ void refresh_status() {
|
||||
}
|
||||
SetWindowTextW(status_label, status.c_str());
|
||||
InvalidateRect(status_label, nullptr, TRUE);
|
||||
SetWindowTextW(connection_button, service.running() ? L"断开连接" : L"启动连接");
|
||||
SetWindowTextW(connection_button, port_occupied ? L"停止连接" : L"启动连接");
|
||||
const bool show_path = connector::find_spine_executable().empty();
|
||||
for (HWND control : {path_label, path_field, browse_button, automatic_button, save_button}) {
|
||||
if (control) ShowWindow(control, show_path ? SW_SHOW : SW_HIDE);
|
||||
@@ -246,6 +251,9 @@ LRESULT CALLBACK window_proc(HWND window, UINT message, WPARAM wparam, LPARAM lp
|
||||
if (service.running()) {
|
||||
service.stop();
|
||||
startup_error.clear();
|
||||
} else if (connector::connector_port_in_use()) {
|
||||
startup_error.clear();
|
||||
connector::stop_connector_port(startup_error);
|
||||
} else {
|
||||
startup_error.clear();
|
||||
service.start(startup_error);
|
||||
|
||||
@@ -20,6 +20,10 @@ std::filesystem::path to_path(const std::string& value);
|
||||
std::string platform_name();
|
||||
std::string find_spine_executable();
|
||||
bool valid_spine_executable(const std::string& path);
|
||||
// 查询/释放连接器固定使用的本地端口。释放操作针对当前监听进程,
|
||||
// 使用户可以从新打开的连接器窗口停止遗留实例或其他占用者。
|
||||
bool connector_port_in_use();
|
||||
bool stop_connector_port(std::string& error);
|
||||
ProcessResult run_process(const std::string& executable,
|
||||
const std::vector<std::string>& arguments,
|
||||
const std::filesystem::path& working_directory,
|
||||
|
||||
@@ -5,6 +5,8 @@
|
||||
#include <chrono>
|
||||
#include <csignal>
|
||||
#include <fcntl.h>
|
||||
#include <set>
|
||||
#include <sstream>
|
||||
#include <stdexcept>
|
||||
#include <sys/types.h>
|
||||
#include <sys/wait.h>
|
||||
@@ -12,6 +14,38 @@
|
||||
#include <unistd.h>
|
||||
|
||||
namespace connector {
|
||||
namespace {
|
||||
|
||||
constexpr unsigned short kConnectorPort = 27843;
|
||||
|
||||
std::filesystem::path lsof_path() {
|
||||
for (const char* candidate : {"/usr/sbin/lsof", "/usr/bin/lsof"}) {
|
||||
if (std::filesystem::exists(candidate)) return candidate;
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
std::set<pid_t> connector_port_pids() {
|
||||
const std::filesystem::path executable = lsof_path();
|
||||
if (executable.empty()) return {};
|
||||
const ProcessResult result = run_process(executable.string(),
|
||||
{"-nP", "-tiTCP:" + std::to_string(kConnectorPort), "-sTCP:LISTEN"}, {}, 3);
|
||||
if (result.timed_out || (result.exit_code != 0 && result.exit_code != 1)) return {};
|
||||
std::set<pid_t> pids;
|
||||
std::istringstream lines(result.output);
|
||||
std::string line;
|
||||
while (std::getline(lines, line)) {
|
||||
try {
|
||||
const long value = std::stol(line);
|
||||
if (value > 0) pids.insert(static_cast<pid_t>(value));
|
||||
} catch (...) {
|
||||
// lsof 可能输出诊断信息;只接受纯数字 PID。
|
||||
}
|
||||
}
|
||||
return pids;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
ProcessResult run_process(const std::string& executable,
|
||||
const std::vector<std::string>& arguments,
|
||||
@@ -70,6 +104,46 @@ ProcessResult run_process(const std::string& executable,
|
||||
return result;
|
||||
}
|
||||
|
||||
bool connector_port_in_use() {
|
||||
return !connector_port_pids().empty();
|
||||
}
|
||||
|
||||
bool stop_connector_port(std::string& error) {
|
||||
const std::set<pid_t> pids = connector_port_pids();
|
||||
if (pids.empty()) {
|
||||
error.clear();
|
||||
return true;
|
||||
}
|
||||
for (const pid_t pid : pids) {
|
||||
if (pid == getpid()) {
|
||||
error = "无法从外部停止当前连接器进程";
|
||||
return false;
|
||||
}
|
||||
if (kill(pid, SIGTERM) != 0) {
|
||||
error = "无法停止占用端口 27843 的进程,请检查系统权限";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
const auto deadline = std::chrono::steady_clock::now() + std::chrono::seconds(3);
|
||||
while (std::chrono::steady_clock::now() < deadline) {
|
||||
if (!connector_port_in_use()) {
|
||||
error.clear();
|
||||
return true;
|
||||
}
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(50));
|
||||
}
|
||||
for (const pid_t pid : pids) {
|
||||
if (kill(pid, 0) == 0) kill(pid, SIGKILL);
|
||||
}
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(100));
|
||||
if (connector_port_in_use()) {
|
||||
error = "已请求停止进程,但端口 27843 仍未释放";
|
||||
return false;
|
||||
}
|
||||
error.clear();
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace connector
|
||||
|
||||
#endif
|
||||
@@ -1,17 +1,24 @@
|
||||
#ifdef _WIN32
|
||||
|
||||
#define NOMINMAX
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <winsock2.h>
|
||||
#include <windows.h>
|
||||
#include <iphlpapi.h>
|
||||
|
||||
#include "platform.hpp"
|
||||
|
||||
#include <chrono>
|
||||
#include <set>
|
||||
#include <stdexcept>
|
||||
#include <thread>
|
||||
#include <vector>
|
||||
|
||||
namespace connector {
|
||||
namespace {
|
||||
|
||||
constexpr unsigned short kConnectorPort = 27843;
|
||||
|
||||
std::wstring wide(const std::string& value) {
|
||||
if (value.empty()) return {};
|
||||
const int size = MultiByteToWideChar(CP_UTF8, 0, value.data(), static_cast<int>(value.size()), nullptr, 0);
|
||||
@@ -35,6 +42,26 @@ std::wstring quote(const std::string& value) {
|
||||
return result + L'\"';
|
||||
}
|
||||
|
||||
std::set<DWORD> connector_port_pids() {
|
||||
DWORD size = 0;
|
||||
DWORD result = GetExtendedTcpTable(nullptr, &size, FALSE, AF_INET,
|
||||
TCP_TABLE_OWNER_PID_LISTENER, 0);
|
||||
if (result != ERROR_INSUFFICIENT_BUFFER || size == 0) return {};
|
||||
std::vector<unsigned char> storage(size);
|
||||
result = GetExtendedTcpTable(storage.data(), &size, FALSE, AF_INET,
|
||||
TCP_TABLE_OWNER_PID_LISTENER, 0);
|
||||
if (result != NO_ERROR) return {};
|
||||
const auto* table = reinterpret_cast<const MIB_TCPTABLE_OWNER_PID*>(storage.data());
|
||||
std::set<DWORD> pids;
|
||||
for (DWORD index = 0; index < table->dwNumEntries; ++index) {
|
||||
const auto& row = table->table[index];
|
||||
if (ntohs(static_cast<u_short>(row.dwLocalPort)) == kConnectorPort && row.dwOwningPid != 0) {
|
||||
pids.insert(row.dwOwningPid);
|
||||
}
|
||||
}
|
||||
return pids;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
ProcessResult run_process(const std::string& executable,
|
||||
@@ -93,6 +120,46 @@ ProcessResult run_process(const std::string& executable,
|
||||
return result;
|
||||
}
|
||||
|
||||
bool connector_port_in_use() {
|
||||
return !connector_port_pids().empty();
|
||||
}
|
||||
|
||||
bool stop_connector_port(std::string& error) {
|
||||
const std::set<DWORD> pids = connector_port_pids();
|
||||
if (pids.empty()) {
|
||||
error.clear();
|
||||
return true;
|
||||
}
|
||||
for (const DWORD pid : pids) {
|
||||
if (pid == GetCurrentProcessId()) {
|
||||
error = "无法从外部停止当前连接器进程";
|
||||
return false;
|
||||
}
|
||||
HANDLE process = OpenProcess(PROCESS_TERMINATE | SYNCHRONIZE, FALSE, pid);
|
||||
if (!process) {
|
||||
error = "无法停止占用端口 27843 的进程,请以管理员身份运行后重试";
|
||||
return false;
|
||||
}
|
||||
const BOOL stopped = TerminateProcess(process, 0);
|
||||
if (stopped) WaitForSingleObject(process, 3000);
|
||||
CloseHandle(process);
|
||||
if (!stopped) {
|
||||
error = "停止占用端口 27843 的进程失败";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
const auto deadline = std::chrono::steady_clock::now() + std::chrono::seconds(3);
|
||||
while (std::chrono::steady_clock::now() < deadline) {
|
||||
if (!connector_port_in_use()) {
|
||||
error.clear();
|
||||
return true;
|
||||
}
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(50));
|
||||
}
|
||||
error = "进程已停止,但端口 27843 仍未释放";
|
||||
return false;
|
||||
}
|
||||
|
||||
} // namespace connector
|
||||
|
||||
#endif
|
||||
@@ -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,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAovklEQVR4Xu1dCbQU1bXt/P8AwydOwSGI0hIFI4rDU4kTQTHiiB9nI9E4BlFRiUNwCio444RzghqcosbZiFOMA4lTnF1qPmaJypfPDzHExVIJT/rffbt2c3r3vbeq33vo+mu9Wmuv7tdd3VV19j77nHurul6p1LV0LV1L19K1dC1NLd/IYP/+twx8j+Dr7cG/dzJa5DH1mr5u328veEx6nM1AYxvi4itbQjujO9weaOCKwhKnrymp7YVus73QY24WGmsSv0wFYNWmOxDaqSJgMDRAzUKJIln6WmfCfr/uT7PQuBSBuoDlZ5kuNut1Z0JIvaeBaAZKyFeNvH3Q/c2DxiYPMR6W6aIb7Ag0AClocIuiWwY+19cV+p5+X1HY/dZjSUFjZKGxDwnAvtdpC7/M2oxusBnoQafAAGqAUwgRGSJVX28Gus0UYscUg8arCEKcWN46Zeks8vlYBDaIGljAEqIEKWkdRew7+brum933IrBxsbFqD2yytnuxCuKX2g3oRlPQg41BgxdDiIAoBpVK3YvArl9a+nftdXke2gfdT0KPTY87Bo1jEVjy2y0AJb8j0INKIRQsCw18lBglt7MQ2lYA3FclXQVQVAwa0zxosrZ70S9SQejfFnoQKSjRChvUBqLt86JYp1Tqkfo7D62B7Segx2PB49eYhKAxzoM6QWEx2A/qF+pGUtADsNBAhGADaAPqg04ilBxgnYxQ+9gM7PfYv1PgfiXQEoCNhcbIEt8eAVgUJh+LJT8khKLQAylKvgatlml4VNLXCRCE11Iol0rL6Wt5SG3P7pfsvx5LCEVE0BEBqBMklxDZodcUurMx6MFbaMA8YqQDKbLLjmRF7PUQuK59DEGFYFEKC6LFPCo0XiFo7JtBcrFKsaTHnlvoToagB2uhQfIA8STfBpzPLcoBEvPQt1T6Jh8JXcdCtxmCFUDWK4REEBMAoHGLQTmwiPGUXHTlotAdC0EPktCg1KzewgaXz4FygCTCktpR6Hcr7L7pvmdOoMdJAcSEoPELQXkoguSiKxeF7phCD47QgDQQrwIgygESSJSSB7hM7GmxpXuNwN92Hf1sCLpt3T9CjyMiBo0LYGOn8bRQLkKwjp5c9INFoDuUR7wefFPklwPEA0qQEt4RQCT8Tt0Ot637Y/dZjychhDwxxKCcpJBcdOU86I4o9ECCAtDA2OAR5SZJH1wq/Qcfo1itikGrlHo1vCdQUcTEYGH3n8clAtAmkfHRmGlcFcpLCslFV86D7kge+TxAwB+8km9FUM4hXQlR0gCQ21F4oTQhBCsGKwJCjzUTQ8wFbCw1xgrlJ4TkEuscQ9CN55GfzPo88jXAQeKzbA5h696lbzUL/Q46RswZdB9TQkiQrwJQML4a804RgK4cg25YoTsNJAVgg1NuhvgA6UokMWTl0vKAfZ73Wq4gAmLQfaYQ7DESCRHEhKCxVihXiuRSxAF0gwrd4SjxDIANSDlAfAPpAXsfJsQrmUTrSqUVdsjA53i00M8UEYSKICQEHps9XsYAaG0UQEwIGnOFclZYAFwpJQTdWIx4QA+kJgANQjmS9SHyY9muhJHoYSuWVuRjM1CRhITQ4AriCCEBADxmFUEnuoHy1pQAQtANNEW+PUAVQDmH/BTxsey2RG6zQmklYsTypZV3dY8Kvm7XBVQQgAoN+wEH8gIwfQL3n8PIkAgsrBMEhKDxBZQHy5Pyt8wEoDtFcMf9gYSIB8pFyDd1Xokn6SHCSaxi+LdK31bY9+yjFYaKwZYM7ledEHLKAo+bsdAkMTEsKgCFcthuAegXK3TH7I7nZn6UeEM+a3yM+BDpluDd+5R6K3ZevbSKfSRGrVFdX8UREkNeeVAhpASQIwLGVQWQEgO565AA9EtDxNvnlvyGpk/JByz5SrxmPbPOEh8inSQS+ziSR61WWpWPMeB9QkWhgsB2rRBUBHQD2xuoE9g4hESAcmDiGRJBjHzFMhEAoDtTy3w8qgDKAeIbMl/It/XW2rAST9KR0TGiD1i1tFoeRjro5/CddAqKgduOOUKDCKQ3UDewCUIhQACZE9ANNN5FRNBuB9AvKkJ8Q/bbgyoHBGDJj2U97Z6NnCXeWjoJA4kkdJ9VSqsDo3uXvjO6XxX7r1nqo+B7WI+fCYlCXUGFoM0iy0ERJ1ABWEh8Nf4pEbRLAPbD+oW64ToBaNZ3JvnMehJvs11Jt0Qf1Le0hsWBa5T6Eodnj7qOFQbFYF0B2/WiM6UhVRZqDWKOCAAVgJQCKwDLh/IUEkFyUfLzEBRBngDaQz6Di0cE3NZ1WjtJBw7NSCfBxCF9Smse2b+01lj3COC5Bd4nrDDwfRCDdQZbHtg00g1iJaHWHBYUgQqhVO8EGv+UCJoSQJ4IuKEa6YTaVhHyWfNj5GvWe/sNEM9MJ+kkmzh67VI/Yky5VAbs3/Z9FQS+zzoDtqeO4N3AlAVbEtojAps8IoKUEyhXiuRSRACquKAA7M6Xxfp5wF4AEfK13pN8m/VKPLPcEk6ij+lXWhs4YUCpP3HsOqXvEnztKAeua0VBMVhX8ELoXRUCewR1AxUBjzMkgpQArAg05sJHTARNOYB+OEZ+nQBQp1ICsNnPAw+Rr5kPy7e1nllviWe2H2Yy+piBVcJB8Ekg+buldU7qX1q3hu9VMX690gD/3L2Gdfx6RhhWDNYZrCPYsqAisH2BdQLbGCImoRnDThQAkVxS5CcFELJ9ks+DUuuPkc/Mt0M7BJZNnmY9iWemk3QQ+XOQ6cid4EgGTh9YGjhhQGm9CRsK8JoD3j8Z62SisGKAOxxvhGBLg3UDNogxEejoIDQ8RNwIFUAHRZBcUgLglzaQD4QEUA5kfh75dZm/RjXzST4tX7MehCjxJB2ETnQEn75B6XvnOEwcVFr/jPVLg/AYA9YFKAgrBnw/nMU6gnUD2xtQBDgOKwIdHagT2IRhDG1sjQBSDaHy1ykCaCAeCJEfE4Baf4x8ZE6K/LHfLa1Zy3pHCIipy/aM9Bqxg0sbTB7cfYOzN+y+ITB5g+6Dz3ePAJ/71906fj0rEjqECiErDeoGFIHf70RPoCJQF+hgKVD+OlUAdSIICaCcQ74VQIh82+lrvdestxnvszYj/uyNSoNAqid6k24bARdu3G1j4FJg824bT9ms2yYA/uZ7WG/yplVReDFsVBUDXQHb8WLLegSIAGLEfqkIQuVARRBygSZLAflQjpTDXAHoyiHy7QY9tPkrB8ivCcB0/cwA2/HbCR4lXy3fN3f9G4mf6EgDeRc5Eqc4Mj3Brd02BS4f0q31ki26bTY1ALx3+abdWrEePmPF4J0jE4IvKa400A3YKEIEcKaQCNgYclSj/YA9i5jnAow14m55MNx0qgD4RVYAhbIfUAHY2q/Wb4d6tP1Y5iP7anVeMh7EgzyQCEJB7lWbd9v8ii27bXGNw3Xf7zbk6iHdvn/11kuB1650wPtYj4KwYqgJwZUH6wYsCWgQ80TAfqA9LsD4WhEESoEKQIWQXJR8S7xFrgBC2Y+Ds6d1Sb7NfmY+u/0U+chCku9rtyV+SJV4kAlyf+lInrZVy5Y3DG3Z6lfbtmw9bZuWbSxucq/hdbyP9SAKCOKqrbptju+hEHwpETfwvYFzIiuCI/uU1rJDRJYzHF+qFAyUfiDmAlYElo8AV8pnctGVVQB2A0EBlBP2r40fbdBaf+20rQsaAohJF2RUHfn9l5KPbAT5rO/MeGQyshxkgtjpwxzJQ1uG3rp9y9Dp27X84OZhLcNu3mEpbnOv4XW8f/MPWraFKCCGa93nISArBLoBtlvrDQIi4OjAiiBVChAbe74g5AJAjgBUBMpnctGV7ZfUEV8yxGv2AzHyNfvZ+Cn5tu4jmLbmY5xO8n2Tl9V5ZD2sHoSBeGT1jY5MT7gj+dbhy213547LbX/7D5cbfpfDHSOW2+FuBzwH8Podbh2s59d3YsDnKQQ4wmXu+yEyiAClRkXAnoCjAztPUFcKxAV0gsjODcRcIFIGLPmdIgBLvhVANPsBCkAbP9Z+tX52/SHrRzA5vq+r+Rn5yEo0drR7EEbib99huWG3OdJB9j079vjhb3fqMeK+XXuMuH+XHjtZ3OOA1+/duceOFAXEcHsmhOnOEa7fsmUr7wYQgRMbRGedwE8oZSLgXIEVAV1ARwW2DADaCxQUQFERJJeQABQNAuAOlSP2zwNKZb/t+nHmjWN9WD9m4GLkgwRYM7ITWYqsv9VZPYhDtoNMkAqSH9i9x84Pjeyx6+9277nbo6Pq8TsHvPfgHj12wXoQxF3ucxSCLxmZG6A/gNisCM7eqLvvCdAY+mnlbJ5AS0HKBSgA6wJFy4BxAeWrQwKwIuCXN9i/OkDI/rX5y8t+Wj+yCJbqO34XXDZ8fojngo/MR70H+ajbyFZYOIgD8Q47g1RP+h49d3987557PLFXz/98fO9v7vnkflU8Dri/8fpje/Yc+bBbD2K4b7ceu0AIcA6I6dbhLduhj0BPgabSiyArB14E2ejADxFxXiFQCkIuoDOEMQGEXIAiaM14yfgJCaFdAtAvidb/ciT7tf6r/XO6l8M+nsdn148gYtKllv2Y0cvIRwaCBJIPy0e2gvz7YPW7VYkHqY/t881RT+7ba6+n9uu1z9Oje+37zI+X3/+PDs+OXv4APM48cIX98Pof9u+195P79drzUSeGGSN7joQQ4AgQE3oEiOum7asigBOgOaQIMDrQfgAugOOIuYAdEVgB1EQQaQYt+UYAMfKtCJJLivyaAGLkA1YARWb9mP0QgGY/u35O7SK4CLKfyXN1H7UYmQjbJ/mwfGTt/Y44ZDKy+skDeu0Fcv90sCP7kJVGv3D4ige9eMS3f/LymCpedHjhyG8f/PxhK/74uYOXPxDieOpHvfZ53AkGjoHyABGgf/DNousrUA4gLine 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": []
|
||||
}
|
||||
}
|
||||
@@ -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": []
|
||||
}
|
||||
}
|
||||
@@ -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": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,471 @@
|
||||
{
|
||||
"format": "SpineParticle.EditorConfig",
|
||||
"version": 1,
|
||||
"savedAt": "2026-09-22T09:10:07.796Z",
|
||||
"editor": {
|
||||
"viewScale": 0.5066311211773208,
|
||||
"viewX": -21.45847112068003,
|
||||
"viewY": 229.1173536037184
|
||||
},
|
||||
"settings": {
|
||||
"backgroundX": 0,
|
||||
"backgroundY": 0,
|
||||
"backgroundOpacity": 1,
|
||||
"backgroundImageName": "",
|
||||
"backgroundImageData": "",
|
||||
"showGrid": true,
|
||||
"exportSettings": {
|
||||
"imagesPath": "./images/",
|
||||
"spineVersion": "3.8",
|
||||
"keyframeCurve": "bezier",
|
||||
"fps": 30,
|
||||
"omitFps": false,
|
||||
"integerFrameAlignment": true,
|
||||
"bonePool": true,
|
||||
"excludeEmptyAnimations": false,
|
||||
"fileName": "SpineParticle.json"
|
||||
}
|
||||
},
|
||||
"timeline": {
|
||||
"fps": 30,
|
||||
"loop": true,
|
||||
"playbackStart": 0,
|
||||
"playbackEnd": 96,
|
||||
"animations": [
|
||||
"animation"
|
||||
]
|
||||
},
|
||||
"selection": {
|
||||
"type": "spine",
|
||||
"id": 1
|
||||
},
|
||||
"scene": {
|
||||
"systems": [],
|
||||
"colliders": [],
|
||||
"paths": [],
|
||||
"spines": [
|
||||
{
|
||||
"id": 1,
|
||||
"name": "Spine",
|
||||
"enabled": true,
|
||||
"visible": true,
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"rotation": 0,
|
||||
"scaleX": 1,
|
||||
"scaleY": 1,
|
||||
"timeOffset": 0,
|
||||
"skeletonFileName": "spineboy-pro.json",
|
||||
"atlasFileName": "spineboy.atlas",
|
||||
"textureFileNames": [
|
||||
"spineboy.png"
|
||||
],
|
||||
"dataVersion": "4.2",
|
||||
"sourceBundle": {
|
||||
"skeleton": {
|
||||
"name": "spineboy-pro.json",
|
||||
"dataUrl": "data:application/json;base64,ewoic2tlbGV0b24iOiB7CgkiaGFzaCI6ICJkcjNLci92TWdQQSIsCgkic3BpbmUiOiAiNC4yLjIyIiwKCSJ4IjogLTE4OC42MywKCSJ5IjogLTcuOTQsCgkid2lkdGgiOiA0MTguNDUsCgkiaGVpZ2h0IjogNjg2LjIsCgkiaW1hZ2VzIjogIi4vaW1hZ2VzLyIsCgkiYXVkaW8iOiAiIgp9LAoiYm9uZXMiOiBbCgl7ICJuYW1lIjogInJvb3QiLCAicm90YXRpb24iOiAwLjA1IH0sCgl7ICJuYW1lIjogImhpcCIsICJwYXJlbnQiOiAicm9vdCIsICJ5IjogMjQ3LjI3IH0sCgl7ICJuYW1lIjogImNyb3NzaGFpciIsICJwYXJlbnQiOiAicm9vdCIsICJ4IjogMzAyLjgzLCAieSI6IDU2OS40NSwgImNvbG9yIjogImZmM2YwMGZmIiwgImljb24iOiAiY2lyY2xlIiB9LAoJewoJCSJuYW1lIjogImFpbS1jb25zdHJhaW50LXRhcmdldCIsCgkJInBhcmVudCI6ICJoaXAiLAoJCSJsZW5ndGgiOiAyNi4yNCwKCQkicm90YXRpb24iOiAxOS42MSwKCQkieCI6IDEuMDIsCgkJInkiOiA1LjYyLAoJCSJjb2xvciI6ICJhYmUzMjNmZiIKCX0sCgl7ICJuYW1lIjogInJlYXItZm9vdC10YXJnZXQiLCAicGFyZW50IjogInJvb3QiLCAieCI6IDYxLjkxLCAieSI6IDAuNDIsICJjb2xvciI6ICJmZjNmMDBmZiIsICJpY29uIjogImlrIiB9LAoJeyAibmFtZSI6ICJyZWFyLWxlZy10YXJnZXQiLCAicGFyZW50IjogInJlYXItZm9vdC10YXJnZXQiLCAieCI6IC0zMy45MSwgInkiOiAzNy4zNCwgImNvbG9yIjogImZmM2YwMGZmIiwgImljb24iOiAiaWsiIH0sCgl7CgkJIm5hbWUiOiAicmVhci10aGlnaCIsCgkJInBhcmVudCI6ICJoaXAiLAoJCSJsZW5ndGgiOiA4NS43MiwKCQkicm90YXRpb24iOiAtNzIuNTQsCgkJIngiOiA4LjkxLAoJCSJ5IjogLTUuNjMsCgkJImNvbG9yIjogImZmMDAwZGZmIgoJfSwKCXsKCQkibmFtZSI6ICJyZWFyLXNoaW4iLAoJCSJwYXJlbnQiOiAicmVhci10aGlnaCIsCgkJImxlbmd0aCI6IDEyMS44OCwKCQkicm90YXRpb24iOiAtMTkuODMsCgkJIngiOiA4Ni4xLAoJCSJ5IjogLTEuMzMsCgkJImNvbG9yIjogImZmMDAwZGZmIgoJfSwKCXsKCQkibmFtZSI6ICJyZWFyLWZvb3QiLAoJCSJwYXJlbnQiOiAicmVhci1zaGluIiwKCQkibGVuZ3RoIjogNTEuNTgsCgkJInJvdGF0aW9uIjogNDUuNzgsCgkJIngiOiAxMjEuNDYsCgkJInkiOiAtMC43NiwKCQkiY29sb3IiOiAiZmYwMDBkZmYiCgl9LAoJewoJCSJuYW1lIjogImJhY2stZm9vdC10aXAiLAoJCSJwYXJlbnQiOiAicmVhci1mb290IiwKCQkibGVuZ3RoIjogNTAuMywKCQkicm90YXRpb24iOiAtMC44NSwKCQkieCI6IDUxLjE3LAoJCSJ5IjogMC4yNCwKCQkiaW5oZXJpdCI6ICJub1JvdGF0aW9uT3JSZWZsZWN0aW9uIiwKCQkiY29sb3IiOiAiZmYwMDBkZmYiCgl9LAoJeyAibmFtZSI6ICJib2FyZC1payIsICJwYXJlbnQiOiAicm9vdCIsICJ4IjogLTEzMS43OCwgInkiOiA2OS4wOSwgImNvbG9yIjogIjRjNTZmZmZmIiwgImljb24iOiAiYXJyb3dzIiB9LAoJeyAibmFtZSI6ICJjbGlwcGluZyIsICJwYXJlbnQiOiAicm9vdCIgfSwKCXsKCQkibmFtZSI6ICJob3ZlcmJvYXJkLWNvbnRyb2xsZXIiLAoJCSJwYXJlbnQiOiAicm9vdCIsCgkJInJvdGF0aW9uIjogLTAuMjgsCgkJIngiOiAtMzI5LjY5LAoJCSJ5IjogNjkuODIsCgkJImNvbG9yIjogImZmMDAwNGZmIiwKCQkiaWNvbiI6ICJhcnJvd3NCIgoJfSwKCXsgIm5hbWUiOiAiZXhoYXVzdDEiLCAicGFyZW50IjogImhvdmVyYm9hcmQtY29udHJvbGxlciIsICJyb3RhdGlvbiI6IDMuMDIsICJ4IjogLTI0OS42OCwgInkiOiA1My4zOSB9LAoJeyAibmFtZSI6ICJleGhhdXN0MiIsICJwYXJlbnQiOiAiaG92ZXJib2FyZC1jb250cm9sbGVyIiwgInJvdGF0aW9uIjogMjYuMzQsICJ4IjogLTE5MS42LCAieSI6IC0yMi45MiB9LAoJewoJCSJuYW1lIjogImV4aGF1c3QzIiwKCQkicGFyZW50IjogImhvdmVyYm9hcmQtY29udHJvbGxlciIsCgkJInJvdGF0aW9uIjogLTEyLjM0LAoJCSJ4IjogLTIzNi4wMywKCQkieSI6IDgwLjU0LAoJCSJzY2FsZVgiOiAwLjc4NDcsCgkJInNjYWxlWSI6IDAuNzg0NwoJfSwKCXsgIm5hbWUiOiAicG9ydGFsLXJvb3QiLCAicGFyZW50IjogInJvb3QiLCAieCI6IDEyLjksICJ5IjogMzI4LjU0LCAic2NhbGVYIjogMi4wMzM0LCAic2NhbGVZIjogMi4wMzM0IH0sCgl7ICJuYW1lIjogImZsYXJlMSIsICJwYXJlbnQiOiAicG9ydGFsLXJvb3QiLCAieCI6IC02LjM0LCAieSI6IC0xNjEuNTcsICJpY29uIjogInBhcnRpY2xlcyIgfSwKCXsgIm5hbWUiOiAiZmxhcmUxMCIsICJwYXJlbnQiOiAicG9ydGFsLXJvb3QiLCAieCI6IC02LjM0LCAieSI6IC0xNjEuNTcsICJpY29uIjogInBhcnRpY2xlcyIgfSwKCXsgIm5hbWUiOiAiZmxhcmUyIiwgInBhcmVudCI6ICJwb3J0YWwtcm9vdCIsICJ4IjogLTYuMzQsICJ5IjogLTE2MS41NywgImljb24iOiAicGFydGljbGVzIiB9LAoJeyAibmFtZSI6ICJmbGFyZTMiLCAicGFyZW50IjogInBvcnRhbC1yb290IiwgIngiOiAtNi4zNCwgInkiOiAtMTYxLjU3LCAiaWNvbiI6ICJwYXJ0aWNsZXMiIH0sCgl7ICJuYW1lIjogImZsYXJlNCIsICJwYXJlbnQiOiAicG9ydGFsLXJvb3QiLCAieCI6IC02LjM0LCAieSI6IC0xNjEuNTcsICJpY29uIjogInBhcnRpY2xlcyIgfSwKCXsgIm5hbWUiOiAiZmxhcmU1IiwgInBhcmVudCI6ICJwb3J0YWwtcm9vdCIsICJ4IjogLTYuMzQsICJ5IjogLTE2MS41NywgImljb24iOiAicGFydGljbGVzIiB9LAoJeyAibmFtZSI6ICJmbGFyZTYiLCAicGFyZW50IjogInBvcnRhbC1yb290IiwgIngiOiAtNi4zNCwgInkiOiAtMTYxLjU3LCAiaWNvbiI6ICJwYXJ0aWNsZXMiIH0sCgl7ICJuYW1lIjogImZsYXJlNyIsICJwYXJlbnQiOiAicG9ydGFsLXJvb3QiLCAieCI6IC02LjM0LCAieSI6IC0xNjEuNTcsICJpY29uIjogInBhcnRpY2xlcyIgfSwKCXsgIm5hbWUiOiAiZmxhcmU4IiwgInBhcmVudCI6ICJwb3J0YWwtcm9vdCIsICJ4IjogLTYuMzQsICJ5IjogLTE2MS41NywgImljb24iOiAicGFydGljbGVzIiB9LAoJeyAibmFtZSI6ICJmbGFyZTkiLCAicGFyZW50IjogInBvcnRhbC1yb290IiwgIngiOiAtNi4zNCwgInkiOiAtMTYxLjU3LCAiaWNvbiI6ICJwYXJ0aWNsZXMiIH0sCgl7CgkJIm5hbWUiOiAidG9yc28iLAoJCSJwYXJlbnQiOiAiaGlwIiwKCQkibGVuZ3RoIjogNDIuNTIsCgkJInJvdGF0aW9uIjogMTAzLjgyLAoJCSJ4IjogLTEuNjIsCgkJInkiOiA0LjksCgkJImNvbG9yIjogImUwZGExOWZmIgoJfSwKCXsgIm5hbWUiOiAidG9yc28yIiwgInBhcmVudCI6ICJ0b3JzbyIsICJsZW5ndGgiOiA0Mi41MiwgIngiOiA0Mi41MiwgImNvbG9yIjogImUwZGExOWZmIiB9LAoJeyAibmFtZSI6ICJ0b3JzbzMiLCAicGFyZW50IjogInRvcnNvMiIsICJsZW5ndGgiOiA0Mi41MiwgIngiOiA0Mi41MiwgImNvbG9yIjogImUwZGExOWZmIiB9LAoJeyAibmFtZSI6ICJmcm9udC1zaG91bGRlciIsICJwYXJlbnQiOiAidG9yc28zIiwgInJvdGF0aW9uIjogMjU1Ljg5LCAieCI6IDE4LjcyLCAieSI6IDE5LjMzLCAiY29sb3IiOiAiMDBmZjA0ZmYiIH0sCgl7ICJuYW1lIjogImZyb250LXVwcGVyLWFybSIsICJwYXJlbnQiOiAiZnJvbnQtc2hvdWxkZXIiLCAibGVuZ3RoIjogNjkuNDUsICJyb3RhdGlvbiI6IC04Ny41MSwgImNvbG9yIjogIjAwZmYwNGZmIiB9LAoJewoJCSJuYW1lIjogImZyb250LWJyYWNlciIsCgkJInBhcmVudCI6ICJmcm9udC11cHBlciLine truncated
|
||||
},
|
||||
"atlas": {
|
||||
"name": "spineboy.atlas",
|
||||
"dataUrl": "data:application/octet-stream;base64,c3BpbmVib3kucG5nCglzaXplOiAxMDI0LCAyNTYKCWZpbHRlcjogTGluZWFyLCBMaW5lYXIKCXNjYWxlOiAwLjUKY3Jvc3NoYWlyCglib3VuZHM6IDM1MiwgNywgNDUsIDQ1CmV5ZS1pbmRpZmZlcmVudAoJYm91bmRzOiA4NjIsIDEwNSwgNDcsIDQ1CmV5ZS1zdXJwcmlzZWQKCWJvdW5kczogNTA1LCA3OSwgNDcsIDQ1CmZyb250LWJyYWNlcgoJYm91bmRzOiA4MjYsIDY2LCAyOSwgNDAKZnJvbnQtZmlzdC1jbG9zZWQKCWJvdW5kczogNzg2LCA2NSwgMzgsIDQxCmZyb250LWZpc3Qtb3BlbgoJYm91bmRzOiA3MTAsIDUxLCA0MywgNDQKCXJvdGF0ZTogOTAKZnJvbnQtZm9vdAoJYm91bmRzOiAyMTAsIDYsIDYzLCAzNQpmcm9udC1zaGluCglib3VuZHM6IDY2NSwgMTI4LCA0MSwgOTIKCXJvdGF0ZTogOTAKZnJvbnQtdGhpZ2gKCWJvdW5kczogMiwgMiwgMjMsIDU2Cglyb3RhdGU6IDkwCmZyb250LXVwcGVyLWFybQoJYm91bmRzOiAyNTAsIDIwNSwgMjMsIDQ5CmdvZ2dsZXMKCWJvdW5kczogNjY1LCAxNzEsIDEzMSwgODMKZ3VuCglib3VuZHM6IDc5OCwgMTUyLCAxMDUsIDEwMgpoZWFkCglib3VuZHM6IDIsIDI3LCAxMzYsIDE0OQpob3ZlcmJvYXJkLWJvYXJkCglib3VuZHM6IDIsIDE3OCwgMjQ2LCA3Ngpob3ZlcmJvYXJkLXRocnVzdGVyCglib3VuZHM6IDcyMiwgOTYsIDMwLCAzMgoJcm90YXRlOiA5MApob3Zlcmdsb3ctc21hbGwKCWJvdW5kczogMjc1LCA4MSwgMTM3LCAzOAptb3V0aC1ncmluZAoJYm91bmRzOiA2MTQsIDk3LCA0NywgMzAKbW91dGgtb29vbwoJYm91bmRzOiA2MTIsIDY1LCA0NywgMzAKbW91dGgtc21pbGUKCWJvdW5kczogNjYxLCA2NCwgNDcsIDMwCm11enpsZS1nbG93Cglib3VuZHM6IDM4MiwgNTQsIDI1LCAyNQptdXp6bGUtcmluZwoJYm91bmRzOiAyNzUsIDU0LCAyNSwgMTA1Cglyb3RhdGU6IDkwCm11enpsZTAxCglib3VuZHM6IDkxMSwgOTUsIDY3LCA0MAoJcm90YXRlOiA5MAptdXp6bGUwMgoJYm91bmRzOiA3OTIsIDEwOCwgNjgsIDQyCm11enpsZTAzCglib3VuZHM6IDk1NiwgMTcxLCA4MywgNTMKCXJvdGF0ZTogOTAKbXV6emxlMDQKCWJvdW5kczogMjc1LCA3LCA3NSwgNDUKbXV6emxlMDUKCWJvdW5kczogMTQwLCAzLCA2OCwgMzgKbmVjawoJYm91bmRzOiAyNTAsIDE4MiwgMTgsIDIxCnBvcnRhbC1iZwoJYm91bmRzOiAxNDAsIDQzLCAxMzMsIDEzMwpwb3J0YWwtZmxhcmUxCglib3VuZHM6IDU1NCwgNjUsIDU2LCAzMApwb3J0YWwtZmxhcmUyCglib3VuZHM6IDc1OSwgMTEyLCA1NywgMzEKCXJvdGF0ZTogOTAKcG9ydGFsLWZsYXJlMwoJYm91bmRzOiA1NTQsIDk3LCA1OCwgMzAKcG9ydGFsLXNoYWRlCglib3VuZHM6IDI3NSwgMTIxLCAxMzMsIDEzMwpwb3J0YWwtc3RyZWFrczEKCWJvdW5kczogNDEwLCAxMjYsIDEyNiwgMTI4CnBvcnRhbC1zdHJlYWtzMgoJYm91bmRzOiA1MzgsIDEyOSwgMTI1LCAxMjUKcmVhci1icmFjZXIKCWJvdW5kczogODU3LCA2NywgMjgsIDM2CnJlYXItZm9vdAoJYm91bmRzOiA2NjMsIDk2LCA1NywgMzAKcmVhci1zaGluCglib3VuZHM6IDQxNCwgODYsIDM4LCA4OQoJcm90YXRlOiA5MApyZWFyLXRoaWdoCglib3VuZHM6IDc1NiwgNjMsIDI4LCA0NwpyZWFyLXVwcGVyLWFybQoJYm91bmRzOiA2MCwgNSwgMjAsIDQ0Cglyb3RhdGU6IDkwCnRvcnNvCglib3VuZHM6IDkwNSwgMTY0LCA0OSwgOTAK"
|
||||
},
|
||||
"textures": [
|
||||
{
|
||||
"name": "spineboy.png",
|
||||
"dataUrl": "data:image/png;base64,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 truncated
|
||||
}
|
||||
]
|
||||
},
|
||||
"selectedAnimation": "portal",
|
||||
"selectedBone": "",
|
||||
"animations": [
|
||||
{
|
||||
"name": "aim",
|
||||
"duration": 0
|
||||
},
|
||||
{
|
||||
"name": "death",
|
||||
"duration": 4.933300018310547
|
||||
},
|
||||
{
|
||||
"name": "hoverboard",
|
||||
"duration": 1
|
||||
},
|
||||
{
|
||||
"name": "idle",
|
||||
"duration": 1.666700005531311
|
||||
},
|
||||
{
|
||||
"name": "idle-turn",
|
||||
"duration": 0.26669999957084656
|
||||
},
|
||||
{
|
||||
"name": "jump",
|
||||
"duration": 1.333299994468689
|
||||
},
|
||||
{
|
||||
"name": "portal",
|
||||
"duration": 3.1666998863220215
|
||||
},
|
||||
{
|
||||
"name": "run",
|
||||
"duration": 0.666700005531311
|
||||
},
|
||||
{
|
||||
"name": "run-to-idle",
|
||||
"duration": 0.26669999957084656
|
||||
},
|
||||
{
|
||||
"name": "shoot",
|
||||
"duration": 0.6333000063896179
|
||||
},
|
||||
{
|
||||
"name": "walk",
|
||||
"duration": 1
|
||||
}
|
||||
],
|
||||
"bones": [
|
||||
{
|
||||
"name": "root",
|
||||
"parent": null,
|
||||
"depth": 0
|
||||
},
|
||||
{
|
||||
"name": "hip",
|
||||
"parent": "root",
|
||||
"depth": 1
|
||||
},
|
||||
{
|
||||
"name": "crosshair",
|
||||
"parent": "root",
|
||||
"depth": 1
|
||||
},
|
||||
{
|
||||
"name": "aim-constraint-target",
|
||||
"parent": "hip",
|
||||
"depth": 2
|
||||
},
|
||||
{
|
||||
"name": "rear-foot-target",
|
||||
"parent": "root",
|
||||
"depth": 1
|
||||
},
|
||||
{
|
||||
"name": "rear-leg-target",
|
||||
"parent": "rear-foot-target",
|
||||
"depth": 2
|
||||
},
|
||||
{
|
||||
"name": "rear-thigh",
|
||||
"parent": "hip",
|
||||
"depth": 2
|
||||
},
|
||||
{
|
||||
"name": "rear-shin",
|
||||
"parent": "rear-thigh",
|
||||
"depth": 3
|
||||
},
|
||||
{
|
||||
"name": "rear-foot",
|
||||
"parent": "rear-shin",
|
||||
"depth": 4
|
||||
},
|
||||
{
|
||||
"name": "back-foot-tip",
|
||||
"parent": "rear-foot",
|
||||
"depth": 5
|
||||
},
|
||||
{
|
||||
"name": "board-ik",
|
||||
"parent": "root",
|
||||
"depth": 1
|
||||
},
|
||||
{
|
||||
"name": "clipping",
|
||||
"parent": "root",
|
||||
"depth": 1
|
||||
},
|
||||
{
|
||||
"name": "hoverboard-controller",
|
||||
"parent": "root",
|
||||
"depth": 1
|
||||
},
|
||||
{
|
||||
"name": "exhaust1",
|
||||
"parent": "hoverboard-controller",
|
||||
"depth": 2
|
||||
},
|
||||
{
|
||||
"name": "exhaust2",
|
||||
"parent": "hoverboard-controller",
|
||||
"depth": 2
|
||||
},
|
||||
{
|
||||
"name": "exhaust3",
|
||||
"parent": "hoverboard-controller",
|
||||
"depth": 2
|
||||
},
|
||||
{
|
||||
"name": "portal-root",
|
||||
"parent": "root",
|
||||
"depth": 1
|
||||
},
|
||||
{
|
||||
"name": "flare1",
|
||||
"parent": "portal-root",
|
||||
"depth": 2
|
||||
},
|
||||
{
|
||||
"name": "flare10",
|
||||
"parent": "portal-root",
|
||||
"depth": 2
|
||||
},
|
||||
{
|
||||
"name": "flare2",
|
||||
"parent": "portal-root",
|
||||
"depth": 2
|
||||
},
|
||||
{
|
||||
"name": "flare3",
|
||||
"parent": "portal-root",
|
||||
"depth": 2
|
||||
},
|
||||
{
|
||||
"name": "flare4",
|
||||
"parent": "portal-root",
|
||||
"depth": 2
|
||||
},
|
||||
{
|
||||
"name": "flare5",
|
||||
"parent": "portal-root",
|
||||
"depth": 2
|
||||
},
|
||||
{
|
||||
"name": "flare6",
|
||||
"parent": "portal-root",
|
||||
"depth": 2
|
||||
},
|
||||
{
|
||||
"name": "flare7",
|
||||
"parent": "portal-root",
|
||||
"depth": 2
|
||||
},
|
||||
{
|
||||
"name": "flare8",
|
||||
"parent": "portal-root",
|
||||
"depth": 2
|
||||
},
|
||||
{
|
||||
"name": "flare9",
|
||||
"parent": "portal-root",
|
||||
"depth": 2
|
||||
},
|
||||
{
|
||||
"name": "torso",
|
||||
"parent": "hip",
|
||||
"depth": 2
|
||||
},
|
||||
{
|
||||
"name": "torso2",
|
||||
"parent": "torso",
|
||||
"depth": 3
|
||||
},
|
||||
{
|
||||
"name": "torso3",
|
||||
"parent": "torso2",
|
||||
"depth": 4
|
||||
},
|
||||
{
|
||||
"name": "front-shoulder",
|
||||
"parent": "torso3",
|
||||
"depth": 5
|
||||
},
|
||||
{
|
||||
"name": "front-upper-arm",
|
||||
"parent": "front-shoulder",
|
||||
"depth": 6
|
||||
},
|
||||
{
|
||||
"name": "front-bracer",
|
||||
"parent": "front-upper-arm",
|
||||
"depth": 7
|
||||
},
|
||||
{
|
||||
"name": "front-fist",
|
||||
"parent": "front-bracer",
|
||||
"depth": 8
|
||||
},
|
||||
{
|
||||
"name": "front-foot-target",
|
||||
"parent": "root",
|
||||
"depth": 1
|
||||
},
|
||||
{
|
||||
"name": "front-leg-target",
|
||||
"parent": "front-foot-target",
|
||||
"depth": 2
|
||||
},
|
||||
{
|
||||
"name": "front-thigh",
|
||||
"parent": "hip",
|
||||
"depth": 2
|
||||
},
|
||||
{
|
||||
"name": "front-shin",
|
||||
"parent": "front-thigh",
|
||||
"depth": 3
|
||||
},
|
||||
{
|
||||
"name": "front-foot",
|
||||
"parent": "front-shin",
|
||||
"depth": 4
|
||||
},
|
||||
{
|
||||
"name": "front-foot-tip",
|
||||
"parent": "front-foot",
|
||||
"depth": 5
|
||||
},
|
||||
{
|
||||
"name": "back-shoulder",
|
||||
"parent": "torso3",
|
||||
"depth": 5
|
||||
},
|
||||
{
|
||||
"name": "rear-upper-arm",
|
||||
"parent": "back-shoulder",
|
||||
"depth": 6
|
||||
},
|
||||
{
|
||||
"name": "rear-bracer",
|
||||
"parent": "rear-upper-arm",
|
||||
"depth": 7
|
||||
},
|
||||
{
|
||||
"name": "gun",
|
||||
"parent": "rear-bracer",
|
||||
"depth": 8
|
||||
},
|
||||
{
|
||||
"name": "gun-tip",
|
||||
"parent": "gun",
|
||||
"depth": 9
|
||||
},
|
||||
{
|
||||
"name": "neck",
|
||||
"parent": "torso3",
|
||||
"depth": 5
|
||||
},
|
||||
{
|
||||
"name": "head",
|
||||
"parent": "neck",
|
||||
"depth": 6
|
||||
},
|
||||
{
|
||||
"name": "hair1",
|
||||
"parent": "head",
|
||||
"depth": 7
|
||||
},
|
||||
{
|
||||
"name": "hair2",
|
||||
"parent": "hair1",
|
||||
"depth": 8
|
||||
},
|
||||
{
|
||||
"name": "hair3",
|
||||
"parent": "head",
|
||||
"depth": 7
|
||||
},
|
||||
{
|
||||
"name": "hair4",
|
||||
"parent": "hair3",
|
||||
"depth": 8
|
||||
},
|
||||
{
|
||||
"name": "hoverboard-thruster-front",
|
||||
"parent": "hoverboard-controller",
|
||||
"depth": 2
|
||||
},
|
||||
{
|
||||
"name": "hoverboard-thruster-rear",
|
||||
"parent": "hoverboard-controller",
|
||||
"depth": 2
|
||||
},
|
||||
{
|
||||
"name": "hoverglow-front",
|
||||
"parent": "hoverboard-thruster-front",
|
||||
"depth": 3
|
||||
},
|
||||
{
|
||||
"name": "hoverglow-rear",
|
||||
"parent": "hoverboard-thruster-rear",
|
||||
"depth": 3
|
||||
},
|
||||
{
|
||||
"name": "muzzle",
|
||||
"parent": "rear-bracer",
|
||||
"depth": 8
|
||||
},
|
||||
{
|
||||
"name": "muzzle-ring",
|
||||
"parent": "muzzle",
|
||||
"depth": 9
|
||||
},
|
||||
{
|
||||
"name": "muzzle-ring2",
|
||||
"parent": "muzzle",
|
||||
"depth": 9
|
||||
},
|
||||
{
|
||||
"name": "muzzle-ring3",
|
||||
"parent": "muzzle",
|
||||
"depth": 9
|
||||
},
|
||||
{
|
||||
"name": "muzzle-ring4",
|
||||
"parent": "muzzle",
|
||||
"depth": 9
|
||||
},
|
||||
{
|
||||
"name": "portal",
|
||||
"parent": "portal-root",
|
||||
"depth": 2
|
||||
},
|
||||
{
|
||||
"name": "portal-shade",
|
||||
"parent": "portal-root",
|
||||
"depth": 2
|
||||
},
|
||||
{
|
||||
"name": "portal-streaks1",
|
||||
"parent": "portal-root",
|
||||
"depth": 2
|
||||
},
|
||||
{
|
||||
"name": "portal-streaks2",
|
||||
"parent": "portal-root",
|
||||
"depth": 2
|
||||
},
|
||||
{
|
||||
"name": "side-glow1",
|
||||
"parent": "hoverboard-controller",
|
||||
"depth": 2
|
||||
},
|
||||
{
|
||||
"name": "side-glow2",
|
||||
"parent": "hoverboard-controller",
|
||||
"depth": 2
|
||||
},
|
||||
{
|
||||
"name": "head-control",
|
||||
"parent": "head",
|
||||
"depth": 7
|
||||
}
|
||||
],
|
||||
"assetVersion": 6,
|
||||
"status": "ready",
|
||||
"error": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,18 +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.力场拖尾"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "烟花金币spine",
|
||||
"file": "烟花金币spine.json"
|
||||
"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"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -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,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 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": []
|
||||
}
|
||||
}
|
||||
@@ -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."
|
||||
}
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
.help-overlay[data-v-ae69ecd7]{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-ae69ecd7]{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-ae69ecd7]{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-ae69ecd7]{margin:0;color:#eef2ff;font-size:19px}.help-head p[data-v-ae69ecd7]{margin:5px 0 0;color:#7786a3;font-size:11px}.help-close[data-v-ae69ecd7]{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-ae69ecd7]:hover{border-color:#7774ff;background:#3b4670;color:#fff}.help-body[data-v-ae69ecd7]{min-height:0;overflow:auto;padding:18px 20px 21px}.help-section[data-v-ae69ecd7]{padding:14px 15px;border:1px solid #2c3850;border-radius:10px;background:#181f2e}.help-section h3[data-v-ae69ecd7]{margin:0 0 11px;color:#9fb2ff;font-size:13px}.help-start ol[data-v-ae69ecd7]{margin:0;padding-left:21px;color:#aab6cc;font-size:12px;line-height:1.75}.help-start li[data-v-ae69ecd7]::marker{color:#7774ff;font-weight:700}.help-section b[data-v-ae69ecd7]{color:#dce4f7}.help-grid[data-v-ae69ecd7]{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(250px,.85fr);gap:12px;margin-top:12px}.help-list[data-v-ae69ecd7]{display:grid;gap:0;margin:0}.help-list>div[data-v-ae69ecd7]{display:grid;grid-template-columns:78px 1fr;gap:9px;padding:7px 0;border-bottom:1px solid #263146}.help-list>div[data-v-ae69ecd7]:last-child{border-bottom:0}.help-list dt[data-v-ae69ecd7]{color:#d3dcf0;font-size:11px;font-weight:700}.help-list dd[data-v-ae69ecd7]{margin:0;color:#8795ae;font-size:11px;line-height:1.5}.shortcut-list[data-v-ae69ecd7]{display:grid;gap:7px}.shortcut-list>div[data-v-ae69ecd7]{display:flex;align-items:center;min-height:25px;gap:5px}.shortcut-list kbd[data-v-ae69ecd7]{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-ae69ecd7]{color:#65728b;font-size:10px}.shortcut-list em[data-v-ae69ecd7]{margin-left:auto;color:#9ca9c1;font-size:11px;font-style:normal}.help-note[data-v-ae69ecd7]{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-ae69ecd7]{margin-top:12px}.help-export p[data-v-ae69ecd7]{margin:0;color:#8997b0;font-size:11px;line-height:1.65}.help-doc-title[data-v-ae69ecd7]{margin:16px 2px 2px;color:#9fb2ff;font-size:13px;font-weight:700;letter-spacing:.5px}.help-module[data-v-ae69ecd7]{margin-top:12px}.help-module-head[data-v-ae69ecd7]{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-ae69ecd7]:hover{color:#fff}.help-module-head .mtitle[data-v-ae69ecd7]{flex:1;min-width:0}.help-module-head .caret[data-v-ae69ecd7]{flex:0 0 auto;color:#7b86a2;font-size:12px}.help-module.open .help-module-head[data-v-ae69ecd7]{color:#fff}.help-module.open .help-module-head .caret[data-v-ae69ecd7]{color:#9fb2ff}.help-module .mnum[data-v-ae69ecd7]{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-ae69ecd7]{border-color:#4a4f8a;background:linear-gradient(135deg,#1d2442,#181d2f)}.help-module.help-connector .help-module-head[data-v-ae69ecd7]{color:#b8c2ff}.help-module .connector-intro[data-v-ae69ecd7]{margin:0 0 10px;color:#9aa8c4;font-size:11px;line-height:1.6}.help-module .connector-intro b[data-v-ae69ecd7]{color:#dce4f7}.help-module .dl-link[data-v-ae69ecd7]{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-ae69ecd7]:hover{border-color:#8982ff;background:#554dc2}.help-module .dl-link small[data-v-ae69ecd7]{color:#cfe0ff;font-weight:500;font-size:9px}.help-module-body[data-v-ae69ecd7]{padding-top:10px}@media(max-width:760px){.help-overlay[data-v-ae69ecd7]{padding:66px 12px 14px}.help-grid[data-v-ae69ecd7]{grid-template-columns:1fr}}.stage-wrap[data-v-373478e7]{position:relative;width:100%;height:100%;overfloLine truncated
|
||||
@@ -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-D08n0lXm.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-D08n0lXm.js";import{SkeletonClipping as de,SkeletonPhysicsMovement as Ze,AnimationStateData as Je,AtlasAttachmentLoader as Qe,SkeletonBounds as je}from"./index-BUbc0qUx.js";import{AssetCache as qo,AssetManagerBase as Ko,Downloader as Zo,SkeletonRendererCore as Jo,Triangulator as Qo}from"./index-BUbc0qUx.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,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-D08n0lXm.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-D08n0lXm.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
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 39 KiB |
|
Before Width: | Height: | Size: 56 KiB |
|
Before Width: | Height: | Size: 66 KiB |
|
Before Width: | Height: | Size: 74 KiB |
|
Before Width: | Height: | Size: 81 KiB |
|
Before Width: | Height: | Size: 85 KiB |
|
Before Width: | Height: | Size: 86 KiB |
|
Before Width: | Height: | Size: 88 KiB |
|
Before Width: | Height: | Size: 87 KiB |
|
Before Width: | Height: | Size: 85 KiB |
|
Before Width: | Height: | Size: 77 KiB |
|
Before Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 567 KiB |
|
After Width: | Height: | Size: 552 KiB |
|
After Width: | Height: | Size: 529 KiB |
|
After Width: | Height: | Size: 555 KiB |
|
After Width: | Height: | Size: 567 KiB |
|
After Width: | Height: | Size: 564 KiB |
|
After Width: | Height: | Size: 559 KiB |
|
After Width: | Height: | Size: 568 KiB |
|
After Width: | Height: | Size: 192 KiB |
|
After Width: | Height: | Size: 189 KiB |
|
After Width: | Height: | Size: 191 KiB |
|
After Width: | Height: | Size: 212 KiB |
|
After Width: | Height: | Size: 24 KiB |
@@ -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 |
|
After Width: | Height: | Size: 6.0 KiB |
|
After Width: | Height: | Size: 3.5 KiB |
|
After Width: | Height: | Size: 4.0 KiB |
|
After Width: | Height: | Size: 4.4 KiB |
|
After Width: | Height: | Size: 5.1 KiB |
|
After Width: | Height: | Size: 5.8 KiB |
|
After Width: | Height: | Size: 6.0 KiB |
|
After Width: | Height: | Size: 5.9 KiB |
|
After Width: | Height: | Size: 5.3 KiB |
|
After Width: | Height: | Size: 5.1 KiB |
|
After Width: | Height: | Size: 5.1 KiB |
|
After Width: | Height: | Size: 4.4 KiB |
|
After Width: | Height: | Size: 4.5 KiB |
|
After Width: | Height: | Size: 2.6 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 2.2 KiB |
@@ -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-D08n0lXm.js"></script>
|
||||
<link rel="stylesheet" crossorigin href="/assets/index-Acs2Q5qJ.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>
|
||||
|
Before Width: | Height: | Size: 88 KiB |
|
Before Width: | Height: | Size: 1.1 MiB |
|
Before Width: | Height: | Size: 3.3 MiB |
|
Before Width: | Height: | Size: 45 KiB |
|
Before Width: | Height: | Size: 267 KiB |
|
Before Width: | Height: | Size: 99 KiB |
|
Before Width: | Height: | Size: 630 KiB |
|
Before Width: | Height: | Size: 526 KiB |
|
Before Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 9.5 KiB |
|
Before Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 9.3 KiB |
|
Before Width: | Height: | Size: 9.5 KiB |
|
Before Width: | Height: | Size: 183 KiB |
|
Before Width: | Height: | Size: 142 KiB |