学习 PixiJS — 精灵状态

栏目: 编程工具 · 发布时间: 5年前

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

精灵状态

如果你有复杂的游戏角色或交互式对象,你可能希望该角色根据游戏环境中发生的情况,以不同的方式运行。每个单独的行为称为状态。如果你在精灵上定义状态,那么只要游戏中出现与该状态相对应的事件,就可以触发这些状态。

比如,通过键盘的方向键控制一个游戏角色时,按下左箭头,角色就向左移动,其实可以理解为,按下左键头时,触发了角色的向左移动的状态。

如果要开始使用精灵状态,首先需要一个状态播放器。状态播放器用于控制精灵状态。 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 图像,其中包含使角色看起来像是在四个不同方向行走所需的所有帧。

    学习 PixiJS — 精灵状态

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

    静态状态

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

    学习 PixiJS — 精灵状态

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

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

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

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

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

    adventuress.show(adventuress.states.left);

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

    学习 PixiJS — 精灵状态

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

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

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

    动画状态

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

    学习 PixiJS — 精灵状态

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

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

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

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

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

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

    学习 PixiJS — 精灵状态

    查看效果

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

    制作动画帧的工具

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

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

    查看所有标签

    猜你喜欢:

    本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

    网络是怎样连接的

    网络是怎样连接的

    [日]户根勤 / 周自恒 / 人民邮电出版社 / 2017-1-1 / CNY 49.00

    本书以探索之旅的形式,从在浏览器中输入网址开始,一路追踪了到显示出网页内容为止的整个过程,以图配文,讲解了网络的全貌,并重点介绍了实际的网络设备和软件是如何工作的。目的是帮助读者理解网络的本质意义,理解实际的设备和软件,进而熟练运用网络技术。同时,专设了“网络术语其实很简单”专栏,以对话的形式介绍了一些网络术语的词源,颇为生动有趣。 本书图文并茂,通俗易懂,非常适合计算机、网络爱好者及相关从......一起来看看 《网络是怎样连接的》 这本书的介绍吧!

    在线进制转换器
    在线进制转换器

    各进制数互转换器

    HTML 编码/解码
    HTML 编码/解码

    HTML 编码/解码

    Base64 编码/解码
    Base64 编码/解码

    Base64 编码/解码