Skip to Content

动画(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日