第三章:精灵与动画:绘制和动画处理
在本章节中,你将学会如何在 Dora 中加载精灵图像,并将其添加到场景中。此外,你还将学习如何使用帧动画,为角色和敌人添加动画效果,使游戏更加生动有趣。
目标
- 加载和显示精灵
- 创建帧动画
- 为角色和敌人 添加动画效果
1. 加载精灵并显示
在 Dora 中,Sprite
是用来显示图像的基本节点。你可以通过 Sprite
来加载和显示游戏角色和敌人等元素的图像。以下代码展示了如何加载一个精灵并将其添加到场景中:
示例代码
import { Sprite, Vec2 } from 'Dora';
// 加载并显示一个图元精灵
const playerSprite = Sprite('Image/art.clip|playerGrey_walk1');
if (!playerSprite) error('创建图元精灵失败!');
playerSprite.order = 1;
playerSprite.position = Vec2(0, 0); // 设置位置
playerSprite.addTo(Director.entry); // 添加到当前场景
在这个例子中,我们通过 Sprite('Image/art.clip|playerGrey_walk1')
来加载一个精灵。playerGrey_walk1
是精灵图的资源名,包含在 Image/art.clip
图集中。position
属性用于设置精灵的显示位置。
2. 创建帧动画
要为角色添加行走或其他重复的动作,我们可以使用帧动画。帧动画由一组图像组成,通过快速切换这些图像来产生动画效果。
在 Dora 中,我们可以创建一个播放帧动画的函数 playAnimation
,如下所示:
dodge_the_creeps/init.tsx
import { Node, Sprite, sleep } from 'Dora';
const playAnimation = (node: Node.Type, name: string) => {
node.removeAllChildren(); // 清空节点中的其他子节点
const interval = 0.2; // 设置帧切换的时间间隔
const frames = [
Sprite(`Image/art.clip|${name}1`) ?? Sprite(),
Sprite(`Image/art.clip|${name}2`) ?? Sprite()
];
for (let frame of frames) {
// 当动画的名称以 `enemy` 开头时,精灵会自动旋转到设定的角度
if (name.startsWith('enemy')) {
frame.angle = -90; // 调整角度
}
frame.addTo(node);
}
let i = 0;
node.loop(() => {
frames[i].visible = true;
i = (i + 1) % 2; // 切换帧
frames[i].visible = false;
sleep(interval);
return false;
});
};
在 playAnimation
函数中:
node.removeAllChildren()
:清空当前节点的子节点,确保不会叠加其他元素。frames
数组包含了动画所需的帧。node.loop()
创建了一个循环,定期切换帧以实现动画效果。sleep(interval)
用来设置帧切换的间隔时间。