二维精灵动画¶
介绍¶
在本教程中,您将学习创建二维动画角色的两种不同方法。通常,当您创建或下载动画角色时,它将以两种方式之一出现:作为单个图像或作为包含所有动画帧的单个sprite表。根据您拥有的资产类型,您可以选择以下解决方案之一。
首先,我们将使用 AnimatedSprite 为单个图像的集合设置动画。然后,要使用sprite表,我们将使用 AnimationPlayer 随着 动画 性质 Sprite .
注解
以下示例的ART由https://opengameart.org/users/ansimuz提供
带有动画精灵的单个图像¶
在这个场景中,您有一组图像,每个图像包含角色的一个动画帧。对于本例,我们将使用以下动画:
您可以在此处下载图像: run_animation.zip
解压图像并将其放在项目文件夹中。使用以下节点设置场景树:
注解
根节点也可以是 Area2D 或 RigidBody2D . 动画仍将以相同的方式制作。动画完成后,可以将形状指定给碰撞形状2d。请参见 Physics Introduction 更多信息。
现在选择 AnimatedSprite
在它里面 SpriteFrames 属性,选择“new spriteframes”。
单击新的spriteframes资源,您将看到一个新面板出现在编辑器窗口的底部:
从左侧的filesystem dock,将8个单独的图像拖动到spriteframes面板的中间部分。在左侧,将动画名称从“默认”更改为“运行”。
回到检查程序中,勾选 玩 属性。现在应该可以看到动画在视区中播放。不过,速度有点慢。要解决此问题,请更改 速度(fps) 在SpriteFrames面板中设置。
您可以通过单击“新建动画”按钮并添加其他图像来添加其他动画。
控制动画¶
动画完成后,可以使用 play()
和 stop()
方法。下面是一个简单的例子,在按住右箭头键的情况下播放动画,并在释放该键时停止动画。
extends KinematicBody2D
func _process(delta):
if Input.is_action_pressed("ui_right"):
$AnimatedSprite.play("run")
else:
$AnimatedSprite.stop()
带动画播放器的sprite工作表¶
如果有一个sprite工作表包含所有动画帧,则不容易使用 AnimatedSprite
. 相反,您可以使用标准 Sprite 显示纹理的节点,然后使用 AnimationPlayer .
考虑这个sprite表,它包含6帧动画:
右键单击图像并选择“另存为”进行下载,然后将图像复制到项目文件夹中。
我们的目标是在一个循环中逐个显示这些图像。首先设置场景树:
注解
根节点也可以是 Area2D 或 RigidBody2D . 动画仍将以相同的方式制作。动画完成后,可以将形状指定给碰撞形状2d。请参见 Physics Introduction 更多信息。
将spriteSheet拖到sprite的 纹理 属性,您将看到整个工作表显示在屏幕上。要将其分割为单个帧,请展开 动画 并设置 H框架 到 6
. H框架 和 vframes(视频帧) 是sprite工作表中的水平和垂直框架数。
现在尝试更改 框架 属性。你会发现它的范围从 0
到 5
精灵显示的图像也会相应地改变。这是我们将要制作动画的属性。
选择 AnimationPlayer
单击“动画”按钮,然后单击“新建”。将新动画命名为“Walk”。将动画长度设置为 0.6
然后单击“循环”按钮,这样我们的动画将重复。
现在选择 Sprite
节点并单击键图标以添加新曲目。
继续在时间线上的每个点添加帧 (0.1
默认为秒),直到所有帧都在0到5之间。您将看到动画轨迹中实际出现的帧:
按动画上的“播放”以查看效果。
总结¶
这些示例说明了在二维动画中遇到的两种最常见的情况。每个都有其好处。使用 AnimationPlayer
有点复杂,但提供了额外的功能,因为您还可以设置其他属性(如位置或比例)的动画。尝试一下,看看哪个最适合你的需要。