跳转到内容

动画

允许在显示屏上使用动画图像。动画组件继承图像组件的所有选项。 它添加了额外的 lambda 方法:next_frame()prev_frame()set_frame() 来更改显示的 GIF 图片。

animation:
- file: "animation.gif"
id: my_animation
resize: 100x100
type: RGB565

动画可以像图像组件一样使用显示组件的 image() 函数进行渲染。

要显示动画的下一帧,调用 id(my_animation).next_frame(),要显示上一帧,使用 id(my_animation).prev_frame()。要显示特定帧,使用 id(my_animation).set_frame(int frame)。 这可以与所有 Lambda 结合使用:

display:
- platform: ...
# ...
lambda: |-
//推进显示动画帧
id(my_animation).next_frame();
// 在位置 [x=0,y=0] 绘制动画 my_animation
it.image(0, 0, id(my_animation), COLOR_ON, COLOR_OFF);

此外,您可以使用 animation.next_frameanimation.prev_frameanimation.set_frame 动作。

NOTE

要独立于显示绘制周期来绘制下一帧动画,可以使用 interval(定时器):

interval:
- interval: 5s
then:
animation.next_frame: my_animation
  • file (必需, string):GIF 文件的路径(相对于 .yaml 文件的位置)。

  • id (必需, ID):用于在显示代码中引用动画的 ID。

  • resize (可选, string):如果设置,将调整所有帧的大小以适应给定尺寸 WIDTHxHEIGHT,并保持纵横比。

  • type (必需):指定如何在内部编码图像。有关更多信息,请参阅 图像组件

    • BINARY:两种颜色,适用于单色显示屏或彩色显示屏中的双色图像。每像素使用 1 位,每字节 8 像素。仅支持 chroma_key 透明度。

    • GRAYSCALE:完整灰度。每像素使用 8 位,每字节 1 像素。

    • RGB565:有损 RGB 颜色存储。每像素使用 2 字节,带 alpha 通道时为 3 字节。

    • RGB:完整 RGB 颜色存储。每像素使用 3 字节,带 alpha 通道时为 4 字节。

  • transparency (可选):如果设置,将考虑输入图像的 alpha 通道。可能的值包括 opaque(默认)、chroma_keyalpha_channel。请参阅 图像组件 中关于透明度的讨论。

  • loop (可选):如果您想循环播放动画的一部分(例如火焰动画,火焰”开始”、然后”燃烧”然后”熄灭”),可以指定一些帧进行循环。

    • start_frame (可选, int):当到达 end_frame 时循环返回的帧。默认为动画的第一帧。
    • end_frame (可选, int):循环中显示的最后一帧;当到达此帧时,将循环返回到 start_frame。默认为动画的最后一帧。
    • repeat (可选, int):指定循环运行的次数。当达到计数时,动画将继续播放 end_frame 之后的下一帧,或者如果 end_frame 是最后一帧,则从头开始。默认为”永远循环”。

将动画推进到下一帧。这相当于 id(my_animation).next_frame(); lambda 调用。

  • id (必需, ID):要操作的动画 ID。

将动画返回到上一帧。这相当于 id(my_animation).prev_frame(); lambda 调用。

  • id (必需, ID):要操作的动画 ID。

将动画设置到特定帧。这相当于 id(my_animation).set_frame(frame); lambda 调用。

  • id (必需, ID):要操作的动画 ID。
  • frame (必需, int):接下来要显示的帧索引。