一篇带给你Pixi.js 入门 (一):绘制图形

开发 前端
pixi.js 是一个快速、灵活的 2D WebGL 渲染引擎。该库基于 Canvas 封装,默认优先使用 WebGL 进行二维图形绘制,充分利用 GPU 硬件加速能力。如果不支持,会回退到 2D 模式,因为 2D 模式是上层的抽象,所以性能会差一些。

简单入门 pixi.js。

pixi.js 是一个快速、灵活的 2D WebGL 渲染引擎。

该库基于 Canvas 封装,默认优先使用 WebGL 进行二维图形绘制,充分利用 GPU 硬件加速能力。如果不支持,会回退到 2D 模式,因为 2D 模式是上层的抽象,所以性能会差一些。

开始

首先创建一个 Application 实例。

我们使用 PIXI.Application 类创建一个新 PixiJS 应用。

import * as PIXI from "pixi.js";

const app = new PIXI.Application({ width: 640, height: 360 });
document.body.appendChild(app.view);

// 绘制内容
// ...

该类可以传入配置对象,比如画布宽高(width / height)、背景色(backgroudColor,默认为黑色)、挂载的 canvas 元素(view,不提供 PixiJS 会创建一个)等。

app.view 可以得到 PixiJS 应用挂载的 Canvas 元素。

绘制图形

绘制图形需要先创建 Graphics 实例,然后调用其下的方法。

一个 Graphics 代表一个图形,当然也可以在单个 Graphics 绘制多个图形。

绘制红色矩形:

const rect = new PIXI.Graphics();

rect.beginFill(0xff0044); // 填充色
rect.lineStyle({ width: 2, color: 0x0000ff }); // 描边
rect.drawRect(10, 10, 100, 50);
rect.endFill();

app.stage.addChild(rect);

app.stage 是图形渲染的根节点,我们创建的 graphics 需要添加到 stage 下,这样才会被渲染出来。

绘制圆形:

const circle = new PIXI.Graphics();

circle.beginFill(0x00ff00);
circle.drawCircle(200, 10, 50);
circle.endFill();

app.stage.addChild(circle);

绘制精灵:

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);

绘制曲线不支持 SVG 的那种方便的 指令字符串 写法:

// 不支持
const trackPath = new Path2D("M10 10 h 80 v 80 h -80 Z");

只能用类似原生 Canvas 写法那样,一步步绘制了。个人觉得很繁琐,指令字符串言简意赅多好的抽象。

const path = new PIXI.Graphics();
path.lineStyle({ width: 1, color: 0x0000ff });
path.moveTo(10, 10);
path.lineTo(20, 100);
path.bezierCurveTo(40, 120, 60, 120, 80, 100)
app.stage.addChild(path);

容器 Container

使用容器,可以将多个图形进行组合,然后在其上添加位移、旋转等属性,其下的图形会得到这些效果。

Container 不绘制图形,它组合图形,类似 SVG 的 group 元素。

const container = new PIXI.Container();
container.x = 80;
container.y = 80;
container.addChild(rect, circle);
app.stage.addChild(container);

结尾

一些基本的用法。

责任编辑:姜华 来源: 前端西瓜哥
相关推荐

2021-01-28 08:55:48

Elasticsear数据库数据存储

2021-07-21 09:48:20

etcd-wal模块解析数据库

2022-07-06 07:57:37

Zookeeper分布式服务框架

2020-12-24 08:07:18

SpringBootSpring SecuWeb

2021-06-28 10:04:12

SpringCloudSleuth微服务

2021-07-12 06:11:14

SkyWalking 仪表板UI篇

2022-03-31 08:09:04

CSS绘制技巧时钟

2021-06-07 12:06:19

SpringCloud Sleuth微服务

2021-10-14 09:58:24

消息中间件ActiveMQ Java

2022-04-29 14:38:49

class文件结构分析

2023-03-29 07:45:58

VS编辑区编程工具

2021-03-12 09:21:31

MySQL数据库逻辑架构

2021-04-01 10:51:55

MySQL锁机制数据库

2024-06-13 08:34:48

2022-02-17 08:53:38

ElasticSea集群部署

2021-04-08 11:00:56

CountDownLaJava进阶开发

2021-06-21 14:36:46

Vite 前端工程化工具

2021-04-14 14:16:58

HttpHttp协议网络协议

2022-03-22 09:09:17

HookReact前端

2021-08-18 10:28:09

MySQL SQL 语句数据库
点赞
收藏

51CTO技术栈公众号