学习 PixiJS — 精灵状态

精灵状态

如果你有复杂的游戏角色或交互式对象,你可能希望该角色根据游戏环境中发生的情况,以不同的方式运行。每个单独的行为称为状态。如果你在精灵上定义状态,那么只要游戏中出现与该状态相对应的事件,就可以触发这些状态。
比如,通过键盘的方向键控制一个游戏角色时,按下左箭头,角色就向左移动,其实可以理解为,按下左键头时,触发了角色的向左移动的状态。

如果要开始使用精灵状态,首先需要一个状态播放器。状态播放器用于控制精灵状态。Pixi 精灵没有自己的状态播放器,但你可以使用 SpriteUtilities 库中的 sprite 的方法,该方法将创建一个内置状态播放器的精灵。

SpriteUtilities 库的使用上一篇提到过了,可以看 学习 PixiJS — 动画精灵 这篇文章。

sprite

定义:

使用 sprite 函数制作任何类型的 Pixi 精灵。

用法:

let anySprite = su.sprite(frameTextures, xPosition, yPosition);

参数:

第一个参数 frameTextures 可以是以下任何一个:

  • 一个 PNG 图像字符串
  • 一个Pixi 纹理对象
  • 纹理图集帧 id 数组
  • 一个 PNG 图像字符串的数组
  • 一个 Pixi 纹理对象数组

如果你为 sprite 方法提供一个数组,它将返回一个动画精灵,这个动画精灵会内置了一个状态播放器。

状态播放器只是四个新属性和方法的集合,用于控制精灵动画状态。

  • fps:用于设置精确的动画速度的属性,以每秒帧数为单位。它的默认值是12,fps 与游戏循环 fps 无关,这意味着你可以让精灵动画以独立于游戏或应用程序速度的速度播放。

  • playAnimation:一种播放精灵动画的方法。如果要播放帧的子集,就传入开始帧编号和结束帧编号两个参数。默认情况下,动画将循环播放,除非你将精灵的 loop 属性值设置为 false

  • stopAnimation:一种在当前帧停止精灵动画的方法。

  • show:接受参数是一个数字,用来显示特定帧编号的方法。

第二个参数 xPosition 和 第三个参数 yPosition 表示创建的精灵的 xy 坐标。

什么是精灵状态?

下图是一个游戏角色的 PNG 图像,其中包含使角色看起来像是在四个不同方向行走所需的所有帧。

在这里插入图片描述

这个雪碧图中实际上有八个精灵状态:四个静态状态和四个动画状态。让我们看看这些状态是什么以及如何定义它们。

静态状态

精灵的静态状态定义精灵在不移动时的四个位置。这些状态是:downleftright,和up。下图显示了雪碧图上的状态以及标识这些状态的帧号。

在这里插入图片描述

可以看到第0帧是向下状态,第4帧是左侧状态,第8帧是右侧状态,第12帧是向上状态。怎么定义这些状态呢?首先,创建精灵,以下代码展示了如何使用 sprite 方法创建精灵。

let frames = su.filmstrip("images/Iori.png", 32, 32);
let Iori = su.sprite(frames);

接下来,在精灵上创建一个名为 states 的对象字面量属性。并在 states 对象中创建downleftright,和up 的键。将每个键的值设置为与状态对应的帧编号。

Iori.states = {
    down: 0,
    left: 4,
    right: 8,
    up: 12
};

接下来就是使用精灵的 show 方法来显示正确的状态。例如,以下代码展示如何显示精灵的 left 状态:

Iori.show(Iori.states.left);

下图显示了改变这些状态对精灵外观的影响。

在这里插入图片描述

你在可以在任何你需要的地方使用它,让精灵对游戏世界的变化作出反应。比较常见的一个场景是在键盘按键的时候,这样你就可以通过箭头键的方向改变精灵面向的方向。例如,按下左箭头键时,你可以通过以下方式将精灵转向左侧。

//左箭头按下
left.press = () => {
 //显示`left`状态
 Iori.show(Iori.states.left);
};

只需对其余的箭头键使用相同的格式,就可以使精灵面向所有的四个方向。

动画状态

精灵的动画状态定义了精灵移动时的四个动作序列。这些状态是:walkDownwalkLeftwalkRight,和walkUp 。下图显示了这些状态在雪碧图上的位置。

[外链图片转存中…(img-VSoCxozn-1712410142452)]

这些状态中的每一个由​四个帧组成,当在循环中播放时,将创建连续的步行动画。要定义每个动画状态,就在 states 对象中创建描述该状态的键。键的值应该是一个包含两个元素的数组:起始帧编号和结束帧编号。例如,以下是如何定义 walkLeft 状态:

//3是动画序列 开始的帧编号,5是结束的帧编号
walkLeft: [3, 5]

以下是如何将这四种新动画状态添加到 Iori 精灵中:

Iori.states = {
    down: 0,
    left: 4,
    right: 8,
    up: 12,
    walkDown: [0, 3],
    walkLeft: [4, 7],
    walkRight: [8, 11],
    walkUp: [12, 15]
};

现在它的状态都被定义了,让我们做一个会走的精灵。

制作动画精灵和定义状态还有键盘响应所学到的知识相结合,就可以制作一个步行游戏角色。

在这里插入图片描述

查看效果

如果希望精灵在屏幕上移动得更快或更慢,就在箭头键方法中更改 vxvy 的值。如果希望精灵的步行动画效果更快或更慢,就更改精灵的 fps 属性。

制作动画帧的工具

  • 使用 Adobe IllustratorPhotoshop 手动绘制每个帧。
  • Flash Professional 只需将动画导出为雪碧图,就可以在 JavaScript 游戏中使用它。你还可以使用 Shoebox 等工具将 Flash 的 SWF 文件格式转换为纹理图集。
  • Piskel 是一个免费的在线工具,用于制作像素风格的动画游戏角色。
  • Dragon BonesSpine,和 Creature。这三个工具都非常相似。它们可以创建复杂的游戏角色,为它们设置动画,并将它们导出为雪碧图和 JSON 文件。
  • Shoebox 是一款基于Adobe Air 的免费应用程序,它的功能挺多,比如可以用来制作雪碧图,也可以拆分雪碧图,还可以检测透明图像中的精灵并将其剪切出来 等。

上一篇 学习 PixiJS — 动画精灵

下一篇 学习 PixiJS — 粒子效果

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
对于学习 PixiJS 和 Three.js 的资料,以下是一些推荐的资源: PixiJS: 1. 官方文档:PixiJS 官方网站提供了详细的文档,包含了教程、示例和 API 参考。你可以在这里找到所有需要的信息:https://pixijs.io/documentation/ 2. PixiJS 学习路径:CSDN 上有一个名为 "Pixi.js 实战教程" 的系列文章,涵盖了从入门到进阶的内容。你可以在这里找到相关的教程:https://blog.csdn.net/column/details/25287.html 3. Github 示例项目:PixiJS 的官方 Github 存储库中有一些示例项目,可以帮助你学习和理解 PixiJS 的使用。你可以在这里找到这些示例:https://github.com/pixijs/examples Three.js: 1. 官方文档:Three.js 官方网站提供了详细的文档,包含了教程、示例和 API 参考。你可以在这里找到所有需要的信息:https://threejs.org/docs/index.html#manual/en/introduction/Creating-a-scene 2. Three.js 学习路径:CSDN 上也有一个名为 "Three.js 实战教程" 的系列文章,涵盖了从入门到进阶的内容。你可以在这里找到相关的教程:https://blog.csdn.net/column/details/25288.html 3. Github 示例项目:Three.js 的官方 Github 存储库中有一些示例项目,可以帮助你学习和理解 Three.js 的使用。你可以在这里找到这些示例:https://github.com/mrdoob/three.js/tree/dev/examples 希望这些资源能帮助你开始学习 PixiJS 和 Three.js!如果有任何其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值