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. JS如何深度复制对象和数组,避免指针变量引用修改值
  2. sd.js帮助您简化繁重的获取数据、存储数据(CRUD)骚操作(吐槽~在安卓9.0以下或者IOS10.X以下手机端H5页面不支持,在这两种情况下的系统只能使用ajax或者原生js请求后台数据)
  3. 在Objective-C中创建一个抽象类
  4. 安全设置IIS的15个方法
  5. 用.NET Core实现一个类似于饿了吗的简易拆红包功能
  6. java方法的参数类型_Java 基础 14 方法的重载 与 方法参数类型详解
  7. centos7 转换为lvm_(建议收藏)CentOS7挂载未分配的磁盘空间以及LVM详细介绍
  8. 【转载】Linux 命令行快捷键 - 移动光标
  9. 数据结构概念及连续存储数组的算法演示
  10. JSON Assertion(JSON断言)
  11. 竹林蹊径:深入浅出Windows驱动开发
  12. 百度地图API常规应用十功能
  13. Delphi 2007 版本号大全
  14. java 多线程,android 移动开发,日语学习,各项新闻RSS吐血分享
  15. 读书笔记 之《软件架构设计: 大型网站技术架构与业务架构融合之道》
  16. class path resource [applicationContext.xml] cannot be opened because it does not exis
  17. cfDNA的5-羟甲基胞嘧啶谱高度预测弥漫大B细胞淋巴瘤患者的R-CHOP治疗反应
  18. linux下查大文件的方法
  19. 电机控制器,FPGA 硬件电流环 基于FPGA的永磁同步伺服控制系统的设计
  20. 微信小程序毕业设计开题报告_springboot音乐网站

热门文章

  1. 家有妙招:教你一个在淘宝买东西打折的好方法
  2. Kali linux 学习笔记(七十五)拒绝服务——teardrop 2020.4.15
  3. EasyX库使用入门
  4. 链表的有序集合(java)
  5. 例题6-21 uva506 System Dependencies 模拟
  6. QT软件开发之入门基础-搭建开发环境
  7. 如何在ChemDraw中绘制分子立体结构
  8. Anaconda conda常用命令:从入门到精通
  9. 低压回路测控终端| 汉光 LPC96P低压回路测控装置
  10. 阿里云云计算:1. 云计算的概念