pixi.js游戏开发

pixi.js游戏开发相关实现

Posted by page on February 1, 2023

pixi.js游戏开发

基本要素

  • 资源(resource)

  • 游戏阶段(gameStatus)

  • 游戏循环(gameLoop)

  • 用户输入(userInput)

资源

监听

const _handle = handle.bind(this);
if (name === 'start') this.loader.onStart.add(_handle);
if (name === 'progress') this.loader.onProgress.add(_handle);
if (name === 'error') this.loader.onError.add(_handle);
if (name === 'complete') this.loader.onComplete.add(_handle);

适配

app.view 将canvas元素作为视口,app.stage 作为画布

画布大小:如 750 * 1600(2倍图像)

像素比:resolution: 2 像素值放大2倍

canvas:width: 100% 宽度占满,高度按画布比例自适应

交互

键盘控制 新增键盘事件,添加指定键各状态的处理

教程见

检测

输入两个sprite,计算二者中心点距离,判断是否碰撞

function hitTestRectangle(sprite1, sprite2) {
  var halfWidthSprite1 = sprite1.width / 2;
  var halfHeightSprite1 = sprite1.height / 2;
  var halfWidthSprite2 = sprite2.width / 2;
  var halfHeightSprite2 = sprite2.height / 2;
  var centerPoint1X = sprite1.x + halfWidthSprite1;
  var centerPoint1Y = sprite1.y + halfHeightSprite1;
  var centerPoint2X = sprite2.x + halfWidthSprite2;
  var centerPoint2Y = sprite2.y + halfHeightSprite2;
  var pointDistanceX = Math.abs(centerPoint1X - centerPoint2X);
  var pointDistanceY = Math.abs(centerPoint1Y - centerPoint2Y);
  if (pointDistanceX >= halfWidthSprite1 + halfWidthSprite2) return false;
  if (pointDistanceY >= halfHeightSprite1 + halfHeightSprite2) return false;
  return true;
}

对象池

  1. 创建对象并放入对象池

  2. 定义回收时机,调用复用对象

  3. 修改回收对象放入对象池,实现复用

周边插件

particle-emitter 粒子

PIXI Sound 音频播放

pixi-spine 骨骼动画

gsap 强大的js动画库,内部提供了PixiPlugin支持

Phaser

https://www.phaser-china.com/

前言 · Phaser从入门到精通

https://phaser.io/tutorials/making-your-first-phaser-3-game-chinese/part2