PixiJS的Sprite类如何使用
本文小编为大家详细介绍“PixiJS的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"], },};// 创建 spritesheetconst 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类如何使用”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341