跳到主要内容

轨道动画

本文档详细介绍轨道(Track)的动画系统,通过 NumEvent 实现轨道的各种变换效果。

事件类型

轨道支持以下类型的动画事件:

事件类型说明
speedEvents音符下落速度
xTransformEventsX轴位移
yTransformEventsY轴位移
zTransformEventsZ轴位移
xRotateEventsX轴旋转
yRotateEventsY轴旋转
zRotateEventsZ轴旋转
xScaleEventsX轴缩放
yScaleEventsY轴缩放
zScaleEventsZ轴缩放

NumEvent 结构

所有动画事件使用统一的 NumEvent 结构:

{
"startBeat": 0,
"endBeat": 4,
"startValue": 1,
"endValue": 2,
"easingType": 0
}
字段类型说明
startBeatdouble起始拍数
endBeatdouble结束拍数
startValuedouble起始值
endValuedouble结束值
easingTypeint缓动函数ID,见下方缓动函数对照表

缓动函数 (Easings)

缓动函数控制数值变化的曲线,使用 ID(整数)表示。以下是所有支持的类型:

ID名称说明
0LINEAR线性变化
1IN_SINE正弦加速进入
2OUT_SINE正弦减速离开
3IN_OUT_SINE正弦加速进入、减速离开
4IN_QUAD二次加速进入
5OUT_QUAD二次减速离开
6IN_OUT_QUAD二次加速进入、减速离开
7IN_CUBIC三次加速进入
8OUT_CUBIC三次减速离开
9IN_OUT_CUBIC三次加速进入、减速离开
10IN_QUART四次加速进入
11OUT_QUART四次减速离开
12IN_OUT_QUART四次加速进入、减速离开
13IN_QUINT五次加速进入
14OUT_QUINT五次减速离开
15IN_OUT_QUINT五次加速进入、减速离开
16IN_EXPO指数加速进入
17OUT_EXPO指数减速离开
18IN_OUT_EXPO指数加速进入、减速离开
19IN_CIRC圆形加速进入
20OUT_CIRC圆形减速离开
21IN_OUT_CIRC圆形加速进入、减速离开
22IN_BACK回退加速进入
23OUT_BACK回退加速离开
24IN_OUT_BACK回退加速进入、离开
25IN_ELASTIC弹性加速进入
26OUT_ELASTIC弹性减速离开
27IN_OUT_ELASTIC弹性加速进入、减速离开
28IN_BOUNCE弹跳进入
29OUT_BOUNCE弹跳离开
30IN_OUT_BOUNCE弹跳进入、离开
31IN_SQUARE平方加速进入
32OUT_SQUARE平方减速离开
33IN_OUT_SQUARE平方加速进入、减速离开

使用示例

速度变化

在拍数 0 到 4 之间,将音符下落速度从 1.0 提升到 2.0:

{
"speedEvents": [
{
"startBeat": 0,
"endBeat": 4,
"startValue": 1.0,
"endValue": 2.0,
"easingType": 5
}
]
}

轨道旋转

在拍数 4 到 8 之间,将轨道沿 Y 轴旋转 180 度:

{
"yRotateEvents": [
{
"startBeat": 4,
"endBeat": 8,
"startValue": 0,
"endValue": 180,
"easingType": 3
}
]
}

轨道位移

在拍数 0 到 2 之间,将轨道沿 X 轴移动 5 格:

{
"xTransformEvents": [
{
"startBeat": 0,
"endBeat": 2,
"startValue": 0,
"endValue": 5,
"easingType": 0
}
]
}

缩放效果

在拍数 0 到 4 之间,将轨道 X 轴缩放从 1.0 变到 0.5:

{
"xScaleEvents": [
{
"startBeat": 0,
"endBeat": 4,
"startValue": 1.0,
"endValue": 0.5,
"easingType": 22
}
]
}

组合使用

可以同时使用多个事件类型来创造复杂的动画效果:

{
"id": 0,
"speedEvents": [
{
"startBeat": 0,
"endBeat": 8,
"startValue": 1.0,
"endValue": 3.0,
"easingType": 4
}
],
"yRotateEvents": [
{
"startBeat": 4,
"endBeat": 12,
"startValue": 0,
"endValue": 360,
"easingType": 0
}
],
"YTransformEvents": [
{
"startBeat": 0,
"endBeat": 4,
"startValue": 0,
"endValue": 10,
"easingType": 29
}
],
"notes": []
}

这个例子中,轨道会在前4拍向下移动,同时速度逐渐加快;在4到12拍之间旋转一圈。