Composer无内置抛物线动画,手动调关键帧因贝塞尔插值与二次函数位移-时间关系不匹配而失真;应使用表达式y0+v0t-490tt并统一时间基准导出时需避坑:改用tt、设60fps、旋转与位移时间逻辑一致。

Composer 里没有内置的“抛物线落地动画”功能,所谓“手动调整关键帧高度实现抛物线”本质是用贝塞尔曲线模拟物理轨迹——但直接拖动关键帧 Y 值很难精准还原真实抛物线,容易出现速度突变、落地弹跳失真、多零件不同步等问题。
为什么直接手调关键帧高度会失真
抛物线运动的核心是位移与时间呈二次关系(y = a·t² + b·t + c),而 Composer 的关键帧插值默认是贝塞尔(ease-in-out 类),不是等时采样下的二次函数。你拖动第 1、3、5 帧的 position.y,系统仍按时间轴均匀插值,中间帧实际位置会偏离真实抛物线。
常见错误现象:
- 落地瞬间速度不为零,看起来“砸穿地面”或“悬停反弹”
- 多个零件同时抛出,但手动调帧后落地时间错开 >30ms,视觉上明显不同步
- 导出为 Lottie 后,iOS 端因插值精度差异,抛物线弧度比预览中更平缓
用表达式替代手调:在 Composer 中写抛物线公式
Composer 支持 AE 表达式语法(需开启「启用表达式」开关)。直接给 position.y 绑定表达式,让每一帧自动计算真实抛物线坐标,比手调可靠得多。
实操建议:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 先确定起始时间
t0(例如 0 秒)、落地时间t1(例如 0.8 秒)、起始高度y0、落地高度y1(通常为 0) - 在
position.y关键帧上右键 →「启用表达式」,粘贴:y0 + (y1 - y0) * Math.pow((time - t0) / (t1 - t0), 2);
- 若需初速度上抛再下落,改用完整公式:
y0 + v0 * (time - t0) - 490 * Math.pow(time - t0, 2); // 490 是简化重力加速度(单位:px/s²)
- 注意:所有变量(
y0、v0、t0)必须用具体数值或引用其他图层属性,不能留空变量名
多零件同步抛物线的关键:统一时间基准
每个零件单独设表达式时,若各自用本地 time,起始时刻稍有偏差(比如图层入点差 1 帧),整个抛物线就错位。必须强制它们共用一个时间原点。
做法:
- 新建一个空图层(命名为
timeline_ref),在其opacity上打一个关键帧,时间设为所有抛物线的理论起始时刻(如 1:15) - 各零件的表达式里,把
time替换为:thisComp.layer("timeline_ref").inPoint + (time - thisComp.layer("timeline_ref").inPoint)或更稳妥地:t_start = thisComp.layer("timeline_ref").inPoint; t = time - t_start; y0 + v0*t - 490*t*t; - 这样即使零件图层入点不同,表达式也始终从同一
t_start开始计时
导出前必检的三个隐藏坑
哪怕表达式完全正确,Lottie 导出仍可能破坏抛物线效果:
-
lottie-web渲染器对Math.pow()兼容性不稳定,建议全部改用t * t替代Math.pow(t, 2) - Composer 默认导出帧率为 30fps,但抛物线在 60fps 下更顺滑;若目标平台支持高刷(如 iOS Safari),应在导出设置里勾选「匹配合成帧率」并确认合成设为 60fps
- 如果零件带旋转(如翻滚下落),
rotation表达式若也依赖time,必须和position.y使用完全相同的时间偏移逻辑,否则旋转相位和位置脱节
真正难的不是写出抛物线公式,而是让时间基准、单位系统、导出链路三者咬合严丝合缝。少一个对齐,动画就在某个设备上突然“变轻”或“变重”。

















