强曰为道
与天地相似,故不违。知周乎万物,而道济天下,故不过。旁行而不流,乐天知命,故不忧.
文档目录

Pixi.js 游戏开发教程 / Pixi.js 简介与环境搭建

Pixi.js 简介与环境搭建

什么是 Pixi.js

Pixi.js 是一个轻量级、高性能的 2D 渲染引擎,基于 WebGL(并回退到 Canvas)来渲染交互式图形和动画。它专注于渲染,不内置游戏逻辑,因此极其灵活,适用于游戏、数据可视化、广告横幅、交互式故事等多种场景。


Pixi.js 的历史与版本

Pixi.js 由 Mat Groves 于 2013 年创建,至今已成为最受欢迎的 HTML5 2D 渲染库之一。

版本发布年份关键特性
v42016统一渲染器、粒子系统
v52019全面重写、新的 API 设计
v62021更好的 TypeScript 支持、WebGPU 实验性支持
v72022去除滤镜依赖、改进的事件系统
v82024全新 Assets 系统、WebGPU 正式支持、性能大幅提升

⚠️ 注意: v8 是当前推荐的稳定版本,API 与 v7 有较大差异。本教程系列以 v8 为主。


Pixi.js vs 其他框架

特性Pixi.jsPhaserEaselJS / CreateJS
定位纯渲染引擎游戏框架渲染 + 工具集
游戏内置功能❌ 无✅ 完整(物理、音效)⚠️ 部分
学习曲线中等较高
WebGL / WebGPU⚠️ 仅 WebGL
社区活跃度低(维护放缓)
体积~150KB~800KB+~200KB
适用场景通用 2D 渲染2D 游戏简单交互

💡 提示: 如果你只需要高性能渲染而不需要完整的游戏循环管理,Pixi.js 是最佳选择。Phaser 内部也使用了类似 Pixi.js 的渲染方式。


安装方式

方式一:npm 安装(推荐)

npm create vite@latest my-pixi-app -- --template vanilla-ts
cd my-pixi-app
npm install pixi.js
npm install

方式二:CDN 引入

<!DOCTYPE html>
<html lang="zh-chs">
<head>
  <meta charset="UTF-8" />
  <title>Pixi.js CDN</title>
</head>
<body>
  <script src="https://pixijs.download/release/pixi.min.js"></script>
  <script>
    const app = new PIXI.Application();
    console.log(PIXI.VERSION);
  </script>
</body>
</html>

方式三:官方脚手架

npx create-pixi-app my-app
cd my-app
npm run dev

项目初始化(Vite + TypeScript)

项目结构

my-pixi-app/
├── index.html
├── package.json
├── tsconfig.json
├── src/
│   └── main.ts
└── public/
    └── image/

index.html

<!DOCTYPE html>
<html lang="zh-chs">
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>Pixi.js App</title>
  <style>
    * { margin: 0; padding: 0; }
    canvas { display: block; }
  </style>
</head>
<body>
  <script type="module" src="/src/main.ts"></script>
</body>
</html>

第一个 Pixi 应用

// src/main.ts
import { Application, Graphics } from 'pixi.js';

(async () => {
  // 创建应用实例
  const app = new Application();

  // 初始化(v8 异步初始化)
  await app.init({
    width: 800,
    height: 600,
    backgroundColor: 0x1099bb,
    antialias: true,
    resolution: window.devicePixelRatio || 1,
    autoDensity: true,
  });

  // 将 canvas 添加到页面
  document.body.appendChild(app.canvas);

  // 创建一个矩形
  const rect = new Graphics();
  rect.rect(0, 0, 100, 100);
  rect.fill(0xff0000);
  rect.x = 350;
  rect.y = 250;

  // 添加到舞台
  app.stage.addChild(rect);

  // 动画循环
  app.ticker.add((ticker) => {
    rect.rotation += 0.02 * ticker.deltaTime;
  });
})();

⚠️ 注意: Pixi.js v8 的 Application 初始化是异步的,必须使用 await app.init() 或在 async 函数中调用。


Canvas vs WebGL 渲染

渲染方式优点缺点
Canvas 2D兼容性好、简单性能较低、无 GPU 加速
WebGLGPU 加速、高性能兼容性略低
WebGPU最新标准、更强性能浏览器支持有限

Pixi.js 默认使用 WebGL 渲染,v8 可配置使用 WebGPU:

await app.init({
  preference: 'webgpu', // 'webgl' | 'webgpu'
});

💡 提示: Pixi.js 会自动检测设备能力,优先使用 WebGL/WebGPU,不支持时回退到 Canvas 2D。


游戏开发场景

场景:快速搭建游戏原型

Pixi.js 不含游戏逻辑,但可以配合 ECS(Entity-Component-System)架构快速搭建原型:

// 简单的游戏对象封装
class GameObject {
  sprite: Graphics;

  constructor(app: Application) {
    this.sprite = new Graphics();
    this.sprite.circle(0, 0, 20);
    this.sprite.fill(0x00ff00);
    app.stage.addChild(this.sprite);
  }

  update(delta: number) {
    this.sprite.x += 2 * delta;
    if (this.sprite.x > 800) this.sprite.x = -20;
  }
}

// 使用
const player = new GameObject(app);
app.ticker.add((t) => player.update(t.deltaTime));

Pixi DevTools 调试工具

Pixi DevTools 是一款 Chrome 浏览器扩展,用于实时调试 Pixi.js 应用。

安装

  1. 在 Chrome Web Store 搜索 “PixiJS DevTools”
  2. 安装并启用

功能

  • 查看场景树(DisplayObject 层级)
  • 实时修改对象属性(位置、旋转、透明度)
  • 查看纹理使用情况
  • FPS 和性能监控
// 开发环境下挂载到全局方便调试
if (import.meta.env.DEV) {
  (window as any).__PIXI_APP__ = app;
}

编辑器配置(VSCode)

推荐插件

插件名用途
TypeScript Hero自动导入
GLSL LiteralShader 语法高亮
Live Server本地开发服务器

tsconfig.json 推荐配置

{
  "compilerOptions": {
    "target": "ES2020",
    "module": "ESNext",
    "moduleResolution": "bundler",
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true,
    "resolveJsonModule": true,
    "isolatedModules": true
  },
  "include": ["src"]
}

⚠️ 常见问题

问题原因解决方案
画面不显示canvas 未添加到 DOM确保 document.body.appendChild(app.canvas)
画面模糊分辨率未适配设置 resolution: window.devicePixelRatio
v7 代码在 v8 中报错API 变更参考 v8 迁移指南
模块导入错误ESM/CJS 混用统一使用 ESM

💡 进阶提示

  1. 按需导入: Pixi.js v8 支持 tree-shaking,建议按需导入:

    import { Application, Sprite, Graphics } from 'pixi.js';
    
  2. WebGPU 降级策略:

    const app = new Application();
    await app.init({
      preference: 'webgpu',
      // WebGPU 不可用时自动回退到 WebGL
    });
    
  3. 开发与生产分离: 使用 import.meta.env.DEV 区分环境,仅开发时挂载调试工具。


扩展阅读


下一章:02 - Application 与渲染流程