动画(Animation)
animated prop 声明「随时间逼近目标值」的只读属性:源表达式给出目标,缓动函数与时长给出路径。读到的值是按当前时刻插出来的中间值,源变化之后值不是立刻跳过去,而是在时长里逐步逼近。
三种形态
animated prop Name: T => 源表达式 ease 缓动 over 时长;
animated prop Name: T => 源表达式 over 时长; // 无 ease,默认 Linear
animated prop Name: T => 源表达式 ease 缓动 over 时长 delay 延迟;class Fader
{
public animated prop Opacity: float => 0.0 ease QuadOut over 2.0s;
public animated prop Fade: float => 1.0 over 1.0s delay 0.5s;
}ease选缓动曲线:收Easing枚举变体,裸变体名QuadOut与限定名Easing.QuadOut等价。over定时长:收 Duration 常量表达式:Duration 字面量(2.0s、500ms)、算术(2s + 500ms)、Duration.From*工厂都行。delay可选,推迟动画开始(同样收 Duration 常量表达式)。
规则
- 只读:animated 没有存储槽,无法写入,与 computed 同律。
- 插值:数值与几何核心类型(int/float、vec2/3/4、vec2i/3i/4i、color)开箱即用。自定义 struct 实现
Lerpable协议后同样逐帧插值。两者皆无的类型不报错,过渡期内保持旧值、到点硬切。 - 完整参与响应式系统:animated 可依赖 computed、可驱动 bind、可进 event prop 管线,源表达式变化即新的动画目标。
Note
动画是时间函数,读到的永远是当前时刻的插值。
tween 语句
tween 是语句级的 imperative 动画:把一个可写 event prop 在给定时长内过渡到目标值。完整形态族:
tween target to endExpr over durExpr; // to + over
tween target to endExpr over durExpr ease easeExpr; // + ease(缺省 Linear)
tween target to endExpr over durExpr delay delayExpr; // + delay
tween target to endExpr over durExpr cancel ct; // + cancel(接取消令牌)
tween target from startExpr to endExpr over durExpr; // from:起点显式
tween target by offsetExpr over durExpr; // by:相对偏移- 目标必须是可写 event prop 的成员访问(裸名按隐式
self.X算)。 - 产出 task:
async func内可await tween ...阻塞到完成。 - 同目标顶掉:同一「节点 + 属性」键上新 tween 取消旧 tween,
cancel ct与顶掉同语义:属性停在当前帧、task 正常完成。 ease收Easing枚举值或自定义函数。
注意
- 源表达式给的是目标值,动画从当前值向目标过渡,目标变化时动画平滑转向新目标。
- 常用缓动:Linear、QuadIn、QuadOut、QuadInOut、CubicIn、CubicOut、CubicInOut——
Easing枚举的七个变体,在 std::Animation 模块中声明。 - 时长为 0 时退化为直接赋值。
最后更新于 2026年10月10日
