官方文档 2D Sprite Animation 介绍了 3 种实现 2D Sprite 动画的方法。

第一种方法适用于每一帧的动画是单独图片的情况。后两种方式适用于多个动画帧在一张图片内的情况。

AnimatedSprite2D+单独的图像帧

这种方式适用于将动画拆分为单独的图像帧(frame)的情况。 需要将每个动画帧作为单独的图像导入到 Godot 中,并使用 AnimatedSprite2D 节点来创建动画。通过在 SpriteFrames 面板中设置帧速率和添加动画帧,可以控制动画的播放。

  1. 点击 AnimatedSprite2DSpriteFrames 属性,选择 New SpriteFrames. AnimatedSprite2D - SpriteFrames - New SpriteFrames
  2. 拖拽单个帧的图片到 SpriteFrames add-individual-frames-to-spriteFrames

AnimatedSprite2D+SpriteSheet

这种方式适用于使用精灵表单(sprite sheet)的情况,精灵表单是指将所有动画帧合并到一个图像中。

  1. 点击 AnimatedSprite2DSpriteFrames 属性,选择 New SpriteFrames.
  2. SpriteFrames 面板中选择 Add frames from a Sprite Sheet add-frames-from-a-sprite-sheet
  3. 选择想要导入的精灵表单,在弹出的窗口中输入行与列的数量将图片分成多个帧(frame),用鼠标选择相应的帧导入。 select-frames

到此为止的前两种用 AnimatedSprete2D 实现的动画都可以在代码中使用 play()stop() 来控制。以 GDScropt 为例:

1
2
3
4
5
6
7
8
9
extends CharacterBody2D

@onready var _animated_sprite = $AnimatedSprite2D

func _process(_delta):
    if Input.is_action_pressed("ui_right"):
        _animated_sprite.play("run")
    else:
        _animated_sprite.stop()

Sprite2D+AnimationPlayer+SpriteSheet

  1. 选中 Sprite2D 节点,拖拽精灵表单到 Texture ,设置相应的 HframesVframes 来切分成单个帧。 sprite2d-texture
  2. 选中 AnimationPlayer 节点,点击 Animation 按钮,接着点 New,输入名字,设置动画时长和循环。 animation-setting
  3. Animation 的时间轴上选择插入点,在 Sprite2DFrame 属性设置中选择对应的帧,点 key (钥匙)图标,将相应的帧插入时间轴。对其余帧重复操作。 click-key-to-add-frame multi-frames-in-animation

AnimationPlayer 也可用通过代码控制动画。比如:

1
2
3
4
5
6
7
8
9
extends CharacterBody2D

@onready var _animation_player = $AnimationPlayer

func _process(_delta):
    if Input.is_action_pressed("ui_right"):
        _animation_player.play("walk")
    else:
        _animation_player.stop()

本文只是概述,详情参看原文.