PIXIJS 文档说明

PIXI.js

1.安装:

npm install pixi.js

2.引入:

import * as PIXI from 'pixi.js'

3.使用:
几个基本概念:
PIXI应用
首先我们在使用PIXI.js时需要先创建一个PIXI应用,也就是生成一个实例,可以传入相应的参数设置, 此时会生成一个canvas元素,这个元素就是app的view属性,然后需要将创建出来的元素添加到页面中

let app = new PIXI.Application({width: 256, height: 256})
document.body.appendChild(app.view)

舞台/stage
在PIXI中舞台只有一个,即app.stage。舞台的本质是一个容器,所有容器有的属性舞台也有,舞台继承 自容器。
舞台是所有需要被显示的内容的根容器,所有要被显示的对象最后都是要添加到舞台里去的。

app.stage.addChild(diaplayObject)

容器/container
container是用来装载多个显示对象的,使用PIXI.Container()方法来创建,一个舞台(stage)中可以包 含多个container。一般是在需要展示复杂的画面时,可以设置多个容器,将精灵分别放到对应的容器 里,再把容器放到舞台里去,这样就方便后续的操作。如果需要多场景切换时,每个场景就可以是一个 容器,每个场景都有自己的精灵,方便控制和管理。

const container = new PIXI.Container() 
container.addChild(sprite)

加载器/loader
如果页面中需要加载大量的图片时,可能需要耗费很长的时间,所以需要一次性预加载所有的图片,同 时可以跟踪进度

const loader = new PIXI.Loader() 
loader.add('bunny', 'data/bunny.png')      
	  .add('spaceship', 'assets/spritesheet.json')
loader.load((loader, resources) => {
    // do something 
})
loader.onProgress.add(() => {}) 
loader.onError.add(() => {}) 
loader.onLoad.add(() => {}) 
loader.onComplete.add(() => {})

精灵/sprite
精灵是可以放在容器中的特殊图像对象,可用代码控制图像的基础,比如位置,大小等,也可以通过控 制其他属性来进行交互和动画

const sprite = PIXI.Sprite().from(imgUrl)

纹理/texture
因为PIXI.js是用WebGL和GPU渲染图像,所以需要将图片转化成GPU可以处理的格式,这种格式叫做纹 理。在精灵显示图片前,需要将普通的图片转换成WebGL纹理。为了更高的效率,PIXI使用纹理缓存来 存储和引用精灵需要的纹理,纹理的名称字符串就是图像的地址。如果你有从 “images/image.png” 加载的图像,你可以在纹理缓存中这样找到他:

PIXI.utils.TextureCache["images/image.png"]

下面是一个简单的在页面中生成精灵Sprite的demo

const app = new PIXI.Application()
document.body.appendChild(app.view)
app.loader.add('bunny', 'bunny.png').load((loader, resources) => {    
	const bunny = new PIXI.Sprite(resources.bunny.texture)
    bunny.x = app.renderer.width / 2   
    bunny.y = app.renderer.height / 2
    bunny.anchor.x = 0.5    
    bunny.anchor.y = 0.5
    app.stage.addChild(bunny)
    app.ticker.add(() => {
      bunny.rotation += 0.01    
	}) 
})

下边列出了一些我们常用的API
1)graphics
graphics主要用于绘制原始形状(如线条,圆形和矩形)以及他们的上色和填充

const graphics = new PIXI.Graphics()
// 线框 
graphics.lineStyle(2, 0x0000FF, 1) graphics.drawRect(50, 250, 100, 100)
// 四边形 
graphics.drawRect(50, 50, 100, 100)
// 圆形 
graphics.drawCircle(100, 250, 50)
// 椭圆 
graphics.drawEllipse(600, 250, 80, 50)
// 圆角矩形 
graphics.drawRoundedRect(50, 440, 100, 100, 16)
// 星星 
graphics.drawStar(360, 370, 5, 50)
// 多边形 
graphics.drawPolygon(path)
// 贝塞尔曲线 
graphics.bezierCurveTo(100, 240, 200, 200, 240, 100)
// 圆弧 
graphics.arc(300, 100, 50, Math.PI, 2 * Math.PI)
app.stage.addChild(graphics)

清除图形 用graphics.clear()方法
2)text

// 基础文字 
const basicText = new PIXI.Text('6666666')
// 自定义文字样式 
const style = new PIXI.TextStyle({    
  fontFamily: 'Arial',    
  fontSize: 36,    
  fontStyle: 'italic',    
  fontWeight: 'bold',    
  fill: ['#ffffff', '#00ff99'],    
  stroke: '#4a1850',    
  strokeThickness: 5,    
  dropShadow: true,    
  dropShadowColor: '#000000',    
  dropShadowBlur: 4,    
  dropShadowAngle: Math.PI / 6,    
  dropShadowDistance: 6,    
  wordWrap: true,    
  wordWrapWidth: 440
}) 
const richText = new PIXI.Text('6666666', style) 
app.stage.addChild(richText)

3)sprite
sprite对象渲染页面中已加载的所有纹理对象的基础,texture相当于拿到了一个图像,作为纹理被 sprite加载

const bunny = PIXI.Sprite.from('examples/assets/bunny.png')
bunny.anchor.set(0.5) 
bunny.x = app.screen.width / 2 
bunny.y = app.screen.height / 2
app.stage.addChild(bunny)

如果有多个纹理需要处理,可以使用spritesheet来达到更高的效率

PIXI.Loader.shared.add("assets/spritesheet.json").load(setup);
function setup() {  
  let sheet = PIXI.Loader.shared.resources["assets/spritesheet.json"].spritesheet;  
  let sprite = new PIXI.Sprite(sheet.textures["image.png"]);  
  ... 
}

sprite 具有zIndex属性,当容器的sortableChildren属性为true时容器中的所有子元素按照zIndex大小 排序
4)texture
texture用于存储图像或者图像的一部分信息,不能直接被加载到页面中去,而是作为sprite的纹理被加 载,texture创建之后可被重复多次使用;要注意的是由svg制成的纹理在文件处理未完成前不能被使用, 可以通过检查_textureID这个属性来验证文件是否处理完成,完成后该属性不为undefined

let texture = PIXI.Texture.from('assets/image.png') 
let sprite1 = new PIXI.Sprite(texture) 
let sprite2 = new PIXI.Sprite(texture)
let texture1 = PIXI.Texture.from('assets/image.svg')
// 销毁纹理 texture.destroy()
// 刷新纹理 texture.update()

5)交互
pixi.js中的事件交互可同时兼容移动端和pc端,在绑定事件之前需要开启交互模式

graphics.interactive = true

在pc端需要出现cursor: pointer的效果

graphics.buttonMode = true

绑定事件在文档中都有详细描述(click, tap,mousedown, mousemove……),下边简单写一下

graphics.on('click', onClick)
function onClick() {    
  graphics.scale.x *= 1.25    
  graphics.scale.y *= 1.25 
}

拖拽功能

const texture = PIXI.Texture.from('examples/assets/bunny.png') 
const bunny = new PIXI.Sprite(texture)
bunny    
  .on('pointerdown', onDragStart)    
  .on('pointerup', onDragEnd)    
  .on('pointerupoutside', onDragEnd)    
  .on('pointermove', onDragMove)     
function onDragStart(event) {    
  this.data = event.data    
  this.alpha = 0.5    
  this.dragging = true 
}
function onDragEnd() {    
  this.alpha = 1    
  this.dragging = false    
  this.data = null 
}
function onDragMove() {    
  if (this.dragging) {        
    const newPosition = this.data.getLocalPosition(this.parent)        
    this.x = newPosition.x        
    this.y = newPosition.y    
  } 
}

6)其他
在离开页面时需要手动清理内存,否则无法释放WebGL内存

app.destroy(true)

4、PIXI.js 地址
https://www.pixijs.com/
5、一些用PIXI实现的例子
https://cavalierchallenge.com/
http://work.goodboydigital.com/runpixierun/
https://flashvhtml.com/html/
https://death-sa.com/Game-Html/Balls%20Break/index.html

发布了26 篇原创文章 · 获赞 15 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/Shuanger112/article/details/103686921