1,Pixi的renderer对象生成一个HTML<canvas>节点并且能指定如何在Canvas上展示你的图像。

2,创建一个特殊的PixiContainer对象名为stage。正如你将看到,这个舞台对象会被用作持有所有你想让Pixi展示的东西的根容器。

//Create the renderer
var renderer = PIXI.autoDetectRenderer(256, 256);//Add the canvas to the HTML document
document.body.appendChild(renderer.view);//Create a container object called the `stage`
var stage = new PIXI.Container();//Tell the `renderer` to `render` the `stage`
renderer.render(stage);复制代码
renderer = PIXI.autoDetectRenderer(256, 256,{antialias: false, transparent: false, resolution: 1}
);
//renderer.view 对象只是一个再普通不过的 <canvas> 对象,所以你可以像控制其他任何 canvas 对象一样控制它。
这里告诉你如何给canvas一个虚线边框:renderer.view.style.border = "1px dashed black";
这里告诉你如何给canvas一个背景色:renderer.backgroundColor = 0x061639;复制代码

3,Pixi通过WebGL在GPU上渲染图像,图像需要被格式化为GPU可以处理的格式。一个为WebGL准备的图像称为纹理。在你制作精灵展示图像之前,你需要把一个原始的图像转化为一个WebGL纹理。为了保持所有的东西都能在底层快速高效的工作,Pixi使用了一个 纹理缓存 去存储和引用所有精灵图所需要的纹理。

4,Pixi有一个 Sprite 类,它是创建游戏精灵的通用方式。这里还有三个主要的方式去创建它们:

  • 使用单独一个图片文件
  • 使用图片集 的一个子图像。图片集是一个单独的,大的图像,它包含了所有游戏中你需要的图片。(译者注:就是我们说的雪碧图吧)。
  • 使用纹理图集(一个定义了在雪碧图中每个子图的位置和大小的JSON文件)

5,先找到纹理,通过纹理再制作成精灵

var texture = PIXI.utils.TextureCache["images/anySpriteImage.png"];
var sprite = new PIXI.Sprite(texture);复制代码

6,如何加载一个图片并把它转化为一个纹理?用Pixi的内置 loader 对象。Pixi强大的loader 对象是你加载任何一种图像的全部所需。

PIXI.loader.add("images/anyImage.png").load(setup);function setup() {//This code will run when the loader has finished loading the image
}复制代码

7,Pixi开发团队推荐 如果你使用了加载器,你应该通过引用纹理中的loaderresources 对象来创建精灵

var sprite = new PIXI.Sprite(PIXI.loader.resources["images/anyImage.png"].texture
);复制代码

有一个例子:

PIXI.loader.add("images/anyImage.png").load(setup);function setup() {var sprite = new PIXI.Sprite(PIXI.loader.resources["images/anyImage.png"].texture);
}复制代码

8,可以通过一连串的 add 方法来一次性加载许多图像:

PIXI.loader.add("images/imageOne.png").add("images/imageTwo.png").add("images/imageThree.png").load(setup);复制代码

更好的做法是,把所有的你想加载的文件放到一个数组里,只通过一个add方法:

PIXI.loader.add(["images/imageOne.png","images/imageTwo.png","images/imageThree.png"]).load(setup);复制代码

9,制作了一个精灵之后,想要在canvas上看到它,还有两件事情你不得不做:

通过 stage.addChild 方法把精灵添加到 Pixi的 stage中:

stage.addChild(cat);复制代码

告诉Pixi的 renderer 去渲染这个舞台。

renderer.render(stage);复制代码

10,从舞台中移除一个精灵,用 removeChild 方法:

stage.removeChild(anySprite)复制代码

但是通常设置精灵的 visible 属性为 false 是一个让精灵消失的高效而且简单方式。

anySprite.visible = false;复制代码

11,你可以通过给Pixi对象和方法设置一个你经常用的简短的别名来使你的代码有更高的可读性

var TextureCache = PIXI.utils.TextureCache
var texture = TextureCache["images/cat.png"];
复制代码

12,如果因为某些原因你需要通过普通JavaScript图像对象制作一个纹理,你可以通过用BaseTextureTexture 类:

var base = new PIXI.BaseTexture(anyImageObject),texture = new PIXI.Texture(base),sprite = new PIXI.Sprite(texture);复制代码

13,如果你想从任何已经存在的canvas节点中制造一个纹理,你可以用

BaseTexture.fromCanvasvar base = new PIXI.BaseTexture.fromCanvas(anyCanvasElement),

14,如果你想改变正在展示的精灵纹理,用 texture 属性。设置它的值为任何 Texture 对象:

anySprite.texture = PIXI.utils.TextureCache["anyTexture.png"];复制代码

15,为每一个资源设置一个独一无二的名字是有可能的。只要在add方法的第一个参数传入一个字符串名字。

PIXI.loader.add("catImage", "images/cat.png").load(setup);复制代码
var cat = new PIXI.Sprite(PIXI.loader.resources.catImage.texture);复制代码

16,Pixi的加载器有一个特殊的 progress 事件会在每次当一个文件加载的时候调用一个可定制的函数。 progress 事件会被loaderon方法调用:

PIXI.loader.on("progress", loadProgressHandler);复制代码

17,通过给 loadProgressHandler添加 loaderresource 参数,可以明确的指明哪个文件已经加载了以及文件加载的百分比

PIXI.loader.add(["images/one.png","images/two.png","images/three.png"]).on("progress", loadProgressHandler).load(setup);function loadProgressHandler(loader, resource) {//Display the file `url` currently being loadedconsole.log("loading: " + resource.url); //Display the precentage of files currently loadedconsole.log("progress: " + loader.progress + "%"); //If you gave your files names as the first argument //of the `add` method, you can access them like this//console.log("loading: " + resource.name);
}function setup() {console.log("All files loaded");
}复制代码

18,可以通过改变 xy 的值来改变猫的位置。如何把猫居中的代码:

cat.x = 96;
cat.y = 96;复制代码

你可以用一行代码把x和y的值一起设置,而不是单独设置:

sprite.position.set(x, y)复制代码

19,可以通过设置 widthheight 来改变精灵图的大小:

cat.width = 80;
cat.height = 120;复制代码

精灵图页有scale.xscale.y属性可以成比例的改变精灵的宽和高。这里告诉你如何设置猫的大小为其原来的一半:

cat.scale.x = 0.5;
cat.scale.y = 0.5;复制代码

Pixi有一个可供替代的,简洁的方式通过一行代码 scale.set 方法设置精灵的尺寸。

cat.scale.set(0.5, 0.5);复制代码

20,可以通过设置 rotation 属性的弧度值来使精灵旋转。

cat.rotation = 0.5;复制代码

精灵的左上角代表它的 xy 位置。这个点叫做 锚点

想让精灵图围绕自己的中心旋转呢?改变 anchor 的值,让它定位到精灵的中心:

cat.anchor.x = 0.5;
cat.anchor.y = 0.5;复制代码

就像设置positionscale一样,你同样可以通过一行代码设置锚点的x和y的值:

sprite.anchor.set(x, y)复制代码

21,精灵图有一个 pivot(中心点)属性,它和anchor的工作方式很相似。如果你改变了中心点的值并旋转精灵,它将围绕这个原点旋转。

cat.pivot.set(32, 32)复制代码

如果你改变精灵的中心点,你同时也改变了它的x/y原点。

anchorpivot很相似。 anchor可以移动精灵图的纹理原点,通过设置0-1的值。pivot通过设置像素值来改变精灵的x和y的原点值。

22,通过图元制作的元素,似乎不能使用anchor或者pivot,比如圆形,锚点已经固定为其圆心。不同的元素层叠,其实就是他们的锚点进行层叠,那么如何让他们居中层叠呢,设置他们的重心为锚点即可:sprite.anchor.set(0.5)。或者使用sprite.pivot.set(sprite.width/2,sprite.height/2)。

转载于:https://juejin.im/post/5bd84f4ee51d453675269ffa

pixi的使用之创建和操作精灵相关推荐

  1. 从头开始创建背景和精灵

    您将要创造的 在本系列的前一部分中,我对Scratch及其使用的主要组件进行了介绍. 在这一部分中,我们将通过添加背景和一些精灵来开始创建项目. 在Scratch中,背景和精灵是资产. 资产还包括服装 ...

  2. tensorflow tf.device() (返回指定要用于新创建的操作的默认设备的上下文管理器)

    @tf_export("device") def device(device_name_or_function):"""Wrapper for `Gr ...

  3. 【Qt】DOM创建和操作XML文档

    00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 创建XML文档 04. 读取XML文档 05. 增加XML节点 06. 查找.删除.更新XML文档 07. 附录 01. ...

  4. [Qt教程] 第28篇 XML(二)使用DOM创建和操作XML文档

    [Qt教程] 第28篇 XML(二)使用DOM创建和操作XML文档 楼主  发表于 2013-5-21 22:00:51 | 查看: 475| 回复: 0 使用DOM创建和操作XML文档 版权声明 该 ...

  5. java 反射创建对象并赋值_java使用反射创建并操作对象的方法

    Class 对象可以获得该类里的方法(由 Method 对象表示).构造器(由 Constructor 对象表示).成员变量(由 Field 对象表示),这三个类都位于 java.lang.refle ...

  6. 广州大学数据库实验报告_广州大学学生Access数据库实验1_表的创建和操作

    学院 工商管理 年级.专 业.班 人力 152 姓名 学号 实验课程名称 数据库技术及应用 II 成绩 优 实验项目名称 表的创建和操作 指导 老师 一.实验目的 1. 掌握 Access 2007 ...

  7. java微信支付v3系列——3.订单创建准备操作

    目录 java微信支付v3系列--1.微信支付准备工作 java微信支付v3系列--2.微信支付基本配置 java微信支付v3系列--3.订单创建准备操作 java微信支付v3系列--4.创建订单的封 ...

  8. tinkerCAD入门操作(3):创建和操作分组对象

    tinkerCAD入门操作(3):创建和操作分组对象 介绍 我们现在将探索Tinkercad的超能力 - 组合简单的形状来制作复杂的对象. 组合形状是实体建模的基本目的.这就是汽车.建筑物和宇宙飞船等 ...

  9. C语言 链表创建及操作

    C语言 链表创建及操作 第一部分构建链表,定义结构体,分别用头插法.尾插法实现,这里封装了打印函数:printf();做练习方便后续使用:对链表进行查找,并将查找到的值构建一个新的链表:链表的转置:具 ...

最新文章

  1. python blp模型 估计_第三章 BLP模型(Bell-La Padula模型) | 学步园
  2. 大数据处理平台与案例
  3. 5月22日 格式与布局
  4. [FY20 创新人才班 ASE] 第 1 次作业成绩
  5. WPF DataGrid根据内容设置行颜色
  6. [Abp vNext 源码分析] - 1. 框架启动流程分析
  7. 48session的生命周期
  8. python 实现对地图的点击_python实现Pyecharts实现动态地图(Map、Geo)
  9. Java基础学习总结(94)——Java线程再学习
  10. synopsys软件介绍
  11. 微软建议用户关闭Win7桌面小工具和侧边栏
  12. 基于matlab的汉明码信道编码,信道编码仿真.doc
  13. MySQL统计每月数量并计算同比增长率
  14. 使用JSONObject比较Java复杂对象
  15. 删除Android空行
  16. ios点击推送闪退_升级iOS14.1之后,我的6S崩溃了|ios|ios系统|手机|闪退
  17. 人工智能的必须的数学基础和编程基础
  18. 第二十五章《图书管理系统》第1节:图书管理系统简介
  19. COSELF 次元秀场伦敦时装周预告 #虚拟时尚
  20. gethostbyname, gethostbyaddr(原来百度叫shifen 十分?)

热门文章

  1. 说说汉古中医对新型冠状病毒感染的认识和防治
  2. matlab中eval的用法
  3. Bootstrap4使用教程
  4. 规模增长背后抖音如何构建直播体验优化
  5. LNMP架构部署详细步骤
  6. Unity自带GL详解
  7. 前端css实现左侧盒子宽度固定,右侧宽度自适应布局
  8. html5应用缓存教程视频教程,html5——应用缓存
  9. 生成指定范围的随机数
  10. 站上风口,文心一言任重道远