PixiJS学习之Sprite类的使用详解

 更新时间:2023年02月20日 09:45:55   作者:前端西瓜哥  
Sprite 直译为 “精灵”,是游戏开发中常见的术语,就是将一个角色的多个动作放到一个图片里,通过裁剪局部区域得到当前的角色状态图。本文主要介绍了PixiJS中Sprite类的使用,需要的可以参考一下

Sprite

pixijs 的 Sprite 类用于将一些纹理(Texture)渲染到屏幕上。

Sprite 直译为 “精灵”,是游戏开发中常见的术语,就是将一个角色的多个动作放到一个图片里,通过裁剪局部区域得到当前的角色状态图。

Sprite 的纹理通常为图片。

创建 Sprite 不用 new 关键字,而是用 PIXI.Sprite.from(url) ,传一个图片地址字符串。

const watermelon = PIXI.Sprite.from('./fe_watermelon.jpg');
watermelon.x = 50;
watermelon.y = 50;

app.stage.addChild(watermelon);

加载图片是异步的,如果图片较大,或网速不好,加载完成的时机就会比较晚了。

加载慢,其他不需要加载的普通图形(比如矩形)才不会等你,会先绘制。然后等到图片加载好后,再更新图形树绘制新的画面。

模拟网速慢,导致图片加载迟缓的效果:

一些属性

tint

tint (大概是 “色相” 的意思)会给图片着色:

img.tint = 0x00FF00;

可以看到,西瓜变得更绿了。

这在游戏中可以利用绿色的 tint 表示角色中毒,或者用灰色的 tint 表示天色已晚。

blendMode

然后是渲染模式 blendMode,目前只支持 4 种(基于 WebGL):

  • NORMAL:正常,即没有滤镜效果;
  • ADD:给下面的像素叠加 RGB 通道;
  • MULTIPLY:正片叠底,效果是:像是很多张幻灯片叠在一起,因为密度大导致颜色加深;
  • SCREEN:滤色,效果是发亮;

anchor

上一节讲解 “修改图形属性” 时,我们提到了通过 pivot 修改变形(transform)的中心,但对于 Sprite 来说,额外提供了一个特殊的 anchor 属性。

这个属性的值范围为 0~1,表示相对图片宽高位置的百分比,比如设置为 (0.5, 0.5) 就是取宽高一半的位置作为旋转中心,也就是图片的中点。

img.anchor.set(x, y);

SpriteSheet

SpriteSheet 是管理多个 Sprite 的类,就是前面说的将多个角色的状态放在一起。

优点是:

  • 加快加载速度:因为多个 sprit 放在一个图片上了;
  • 提高批渲染效率:pixijs 快的秘诀是使用尽量少的 draw call(CPU 通知 GPU 绘制,比 GPU 绘制还耗时),将多个 sprite 放在一起有助于批渲染。
const atlasData = {
  // 如何裁剪图片中的内容来生成多个 sprite
  frames: {
    enemy1: {
      frame: { x: 0, y: 0, w: 32, h: 32 },
      sourceSize: { w: 32, h: 32 },
      spriteSourceSize: { x: 0, y: 0, w: 32, h: 32 },
    },
    enemy2: {
      frame: { x: 32, y: 0, w: 32, h: 32 },
      sourceSize: { w: 32, h: 32 },
      spriteSourceSize: { x: 0, y: 0, w: 32, h: 32 },
    },
  },
  // 图片元信息
  meta: {
    image: "images/spritesheet.png",
    format: "RGBA8888",
    size: { w: 128, h: 32 },
    scale: 1,
  },
  // 如果使用动画,动画帧对应的 sprit
  animations: {
    enemy: ["enemy1", "enemy2"],
  },
};

// 创建 spritesheet
const spritesheet = new PIXI.Spritesheet(
  PIXI.BaseTexture.from(atlasData.meta.image),
  atlasData
);

// 生成材质,这是异步的
await spritesheet.parse();

// 播放动画
const anim = new PIXI.AnimatedSprite(spritesheet.animations.enemy);
anim.animationSpeed = 0.1666;
anim.play();
app.stage.addChild(anim);

到此这篇关于PixiJS学习之Sprite类的使用详解的文章就介绍到这了,更多相关PixiJS Sprite类内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 用ajax实现的自动投票的代码

    用ajax实现的自动投票的代码

    用ajax实现的自动投票的代码...
    2007-03-03
  • 微信小程序实现上传图片的功能

    微信小程序实现上传图片的功能

    这篇文章主要为大家详细介绍了微信小程序实现上传图片的功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • 微信小程序自定义Modal弹框

    微信小程序自定义Modal弹框

    这篇文章主要为大家详细介绍了微信小程序自定义Modal弹框效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • javascript常用代码段搜集

    javascript常用代码段搜集

    这篇文章主要记录了本人搜集的几段javascript常用代码段,都是平时项目中需要用到的,需要的朋友可以参考下
    2014-12-12
  • js剪切板应用clipboardData实例解析

    js剪切板应用clipboardData实例解析

    这篇文章主要为大家详细介绍了js剪切板应用clipboardData实例,并分享了四种实现方法,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • vite添加环境变量import.meta.env的方法

    vite添加环境变量import.meta.env的方法

    在不同的文件里面配置不同的环境变量,可以让我们的配置更加容易维护和使用,这里我们说下vite配置环境变量和模式是怎么配置的,对vite环境变量相关知识感兴趣的朋友跟随小编一起看看吧
    2023-10-10
  • 用于table内容排序

    用于table内容排序

    用于table内容排序...
    2006-07-07
  • 10 种最常见的 Javascript 错误(频率最高)

    10 种最常见的 Javascript 错误(频率最高)

    本文是小编给大家收藏的JavaScript 中频度最高的 10 种错误,我们会告诉你什么原因导致了这些错误,以及如何防止这些错误发生。需要的朋友参考下
    2018-02-02
  • 微信小程序视图容器和基本内容组件图文详解

    微信小程序视图容器和基本内容组件图文详解

    小程序提供了丰富的基础组件给开发者,开发者可以像搭积木一样,组合各种组件拼合成自己的小程序,下面这篇文章主要给大家介绍了关于微信小程序视图容器和基本内容组件的相关资料,需要的朋友可以参考下
    2022-07-07
  • JS填写银行卡号每隔4位数字加一个空格

    JS填写银行卡号每隔4位数字加一个空格

    这篇文章主要介绍了JS填写银行卡号每隔4位数字加一个空格的相关资料,需要的朋友可以参考下
    2016-12-12

最新评论