如何使用Manim实现物体颜色变化动画,让Dot周期性切换颜色
可以实现,不需要借助AnimatedBoundary类,直接对Dot的颜色属性做插值动画即可,最终效果和你预期一致:
实现核心逻辑
- Dot的显示颜色由
fill_color(填充色)和stroke_color(描边色)两个属性控制,直接对这两个属性做周期性插值就能实现变色动画。 - 可以用
ValueTracker作为时间驱动源绑定颜色更新逻辑,也可以直接用帧更新函数实现无限循环效果。
Manim 实现示例代码
from manim import * class CycleColorDot(Scene): def construct(self): # 初始化Dot,可自定义半径、初始颜色 target_dot = Dot(radius=0.4, color=RED) # 定义循环的色值序列,首尾一致可实现无缝循环 color_list = [RED, ORANGE, YELLOW, GREEN, BLUE, PURPLE, RED] # 单轮完整变色的周期时长(单位:秒) single_cycle_time = 1.5 # 颜色更新函数 def color_updater(mob, alpha): # 根据动画进度计算当前插值的两个色值 step_count = len(color_list) - 1 current_step = int(alpha * step_count) step_progress = (alpha * step_count) % 1 current_color = interpolate_color( color_list[current_step], color_list[current_step + 1], step_progress ) mob.set_color(current_color) self.add(target_dot) # 启动动画,run_time设置总播放时长,设置为较大值可实现长时间循环 self.play( UpdateFromAlphaFunc(target_dot, color_updater), run_time=15, rate_func=linear )
如果你使用的是其他框架,核心逻辑通用:获取Dot实例的颜色属性,按照时间参数插值计算当前帧的色值,把更新逻辑绑定到全局帧刷新事件即可。
内容的提问来源于stack exchange,提问作者maciejwww
相关产品推荐
相关产品推荐

