探索 PixiJS:强大的 2D 图形渲染库

探索 PixiJS:强大的 2D 图形渲染库

  1. 演示地址 演示地址
  2. 源码地址 源码地址
  3. 获取更多 获取更多
  • 随着 Web 技术的发展,越来越多的开发者希望在网页中实现丰富的视觉效果和动画。PixiJS 作为一个高性能的 2D 渲染库,凭借其强大的功能和易用性,成为了许多游戏和互动应用开发者的首选。本文将深入探讨 PixiJS 的特点、应用场景以及核心功能,帮助你更好地理解并应用这个库。

什么是 PixiJS?

  • PixiJS 是一个开源的 2D 渲染引擎,旨在为 Web 应用提供高性能的图形渲染。它使用 WebGL 渲染技术,能够在现代浏览器中实现流畅的动画和交互效果,同时也兼容 Canvas 作为回退方案。PixiJS 的灵活性和扩展性使其非常适合开发游戏、图形应用、数据可视化等多种场景。

为什么选择 PixiJS?

  • PixiJS 的设计理念是高效和易用。它不仅提供了强大的图形处理能力,还确保了良好的性能,能够支持大规模的图形和动画。以下是使用 PixiJS 的一些主要优势:

  • 高性能渲染:

  1. PixiJS 基于 WebGL 构建,能够利用 GPU 加速渲染,提供极高的帧率,适合制作动画密集型的应用。
    灵活的场景图形:

  2. PixiJS 允许开发者创建复杂的场景结构,通过容器和精灵(Sprite)来管理和渲染对象,使得构建复杂的用户界面变得简单。
    丰富的内置功能:

  3. PixiJS 内置了对滤镜、遮罩、纹理管理、动画等功能的支持,极大地简化了图形处理和效果实现。
    友好的开发体验:

  4. PixiJS 提供了简洁的 API 和详细的文档,开发者可以快速上手,降低学习曲线。

  • 跨平台支持:
  • 由于基于 HTML5 技术,PixiJS 可以在所有支持 WebGL 的浏览器中运行,包括桌面和移动设备,确保了广泛的兼容性。

快速上手

  • 首先,你需要在你的项目中引入 PixiJS。你可以通过 CDN 或 npm 安装。
  1. 使用 CDN
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>PixiJS Example</title><script src="https://pixijs.download/release/pixi.js"></script></head><body><script>// PixiJS 代码将在这里编写</script></body>
</html>
  1. 使用 CDN
  • 如果你使用 Node.js 项目,可以通过 npm 安装 PixiJS:
npm install pixi.js
  1. 创建 PixiJS 应用
  • PixiJS 应用的创建非常简单。首先需要实例化一个 PIXI.Application 对象,并将其视图(canvas)添加到 HTML 文档中。
import * as PIXI from 'pixi.js';// 添加应用
const app = new PIXI.Application({width:window.innerWidth,height:window.innerHeight,background:0x1099bb,resolution:window.devicePixelRatio | 1
});const circle = new PIXI.Graphics();
circle.beginFill(0x66ccff,0.9);
circle.drawCircle(0,0,32);
circle.endFill();
circle.position.set(300,200);
app.stage.addChild(circle);document.body.appendChild(app.view as any);

常见图元绘制

  1. 绘制矩形
  • 绘制矩形可以使用 drawRect 方法。需要指定矩形的位置和尺寸:
import * as PIXI from 'pixi.js';const app = new PIXI.Application({width: window.innerWidth,height: window.innerHeight,background: 0x1099bb,resolution: window.devicePixelRatio || 1
});const graphics = new PIXI.Graphics();
graphics.beginFill(0xff0000);
graphics.drawRect(50,50,100,100);
graphics.endFill();
graphics.position.set(100,100);
app.stage.addChild(graphics);document.body.appendChild(app.view as any);
  1. 绘制圆形
  • 使用 drawCircle 方法可以绘制圆形。需要指定圆心坐标和半径:
import * as PIXI from 'pixi.js';const app = new PIXI.Application({width: window.innerWidth,height: window.innerHeight,background: 0x1099bb,resolution: window.devicePixelRatio || 1
});const graphics = new PIXI.Graphics();
graphics.beginFill(0xff0000);
graphics.drawCircle(200, 200, 50);
graphics.endFill();
graphics.position.set(100,100);
app.stage.addChild(graphics);document.body.appendChild(app.view as any);
  1. 绘制线条
  • 使用 lineStyle 方法设置线条的样式,然后使用 moveTo 和 lineTo 方法绘制线条:
import * as PIXI from 'pixi.js';const app = new PIXI.Application({width: window.innerWidth,height: window.innerHeight,background: 0x1099bb,resolution: window.devicePixelRatio || 1
});const graphics = new PIXI.Graphics();
graphics.lineStyle(2,0x0000ff);
graphics.moveTo(300, 50);
graphics.lineTo(400, 150);
graphics.endFill();
graphics.position.set(100,100);
app.stage.addChild(graphics);document.body.appendChild(app.view as any);
  1. 绘制多边形
  • 使用 drawPolygon 方法可以绘制多边形。你需要传递一个数组,定义多边形的各个顶点:
import * as PIXI from 'pixi.js';const app = new PIXI.Application({width: window.innerWidth,height: window.innerHeight,background:0x1099bb,resolution: window.devicePixelRatio || 1,
});const graphics = new PIXI.Graphics();
graphics.beginFill(0xffff00);
const points = [100, 100, 150, 50, 200, 100];
graphics.drawPolygon(points);
graphics.endFill();
graphics.position.set(100,100);
app.stage.addChild(graphics);document.body.appendChild(app.view as any);
  1. 绘制贝塞尔曲线
  • 使用 bezierCurveTo 方法可以绘制贝塞尔曲线。需要指定控制点和终点:
import * as PIXI from 'pixi.js';const app = new PIXI.Application({width: window.innerWidth,height: window.innerHeight,background:0x1099bb,resolution: window.devicePixelRatio || 1,
});const graphics = new PIXI.Graphics();
graphics.lineStyle(2,0xff00ff);
graphics.moveTo(400, 200);
graphics.bezierCurveTo(450, 100, 500, 300, 600, 200);
graphics.position.set(100,100);
app.stage.addChild(graphics);document.body.appendChild(app.view as any);
  1. 设置透明度和线条样式
import * as PIXI from 'pixi.js';const app = new PIXI.Application({width: window.innerWidth,height: window.innerHeight,background:0x1099bb,resolution: window.devicePixelRatio || 1,
});const graphics = new PIXI.Graphics();
graphics.beginFill(0x0000ff,0.5);
graphics.drawRect(150, 150, 100, 100);
graphics.endFill();
graphics.position.set(100,100);
app.stage.addChild(graphics);document.body.appendChild(app.view as any);

添加精灵

  • 精灵是 PixiJS 中最基本的图形对象,用于显示纹理。你可以从本地文件或网络加载图像。
import * as PIXI from 'pixi.js';const app = new PIXI.Application({width: window.innerWidth,height: window.innerHeight,background:0x1099bb,resolution: window.devicePixelRatio || 1,
});const graphics = new PIXI.Graphics();
graphics.beginFill(0x0000ff,0.5);
graphics.drawRect(150, 150, 100, 100);
graphics.endFill();
graphics.position.set(100,100);
app.stage.addChild(graphics);// 创建纹理
const texture = PIXI.Texture.from('./vite.svg');
// 创建精灵
const sprite = new PIXI.Sprite(texture);
//  设置精灵位置
sprite.x = app.screen.width / 2;
sprite.y = app.screen.height / 2;app.stage.addChild(sprite);// 添加动画
app.ticker.add((delta) => {sprite.rotation += 0.01 * delta;
})document.body.appendChild(app.view as any);

添加交互事件

  • PixiJS 允许你为精灵和图形添加交互事件,如点击、拖拽等。
import * as PIXI from 'pixi.js';const app = new PIXI.Application({width: window.innerWidth,height: window.innerHeight,background:0x1099bb,resolution: window.devicePixelRatio || 1,
});const graphics = new PIXI.Graphics();
graphics.beginFill(0x0000ff,0.5);
graphics.drawRect(150, 150, 100, 100);
graphics.endFill();
graphics.position.set(100,100);
app.stage.addChild(graphics);// 创建纹理
const texture = PIXI.Texture.from('./vite.svg');
// 创建精灵
const sprite = new PIXI.Sprite(texture);
//  设置精灵位置
sprite.x = app.screen.width / 2;
sprite.y = app.screen.height / 2;
// 交互事件
//-----------------------------
sprite.interactive = true; // 使精灵可交互
sprite.on("click", () => {console.log("click");
});app.stage.addChild(sprite);// 添加动画
app.ticker.add((delta) => {sprite.rotation += 0.01 * delta;
})document.body.appendChild(app.view as any);

加载纹理和资源

  • PixiJS 提供了资源加载器,可以加载多个图像和纹理。
import * as PIXI from 'pixi.js';const app = new PIXI.Application({width: window.innerWidth,height: window.innerHeight,background: 0x1099bb,resolution: window.devicePixelRatio || 1,
});const graphics = new PIXI.Graphics();
graphics.beginFill(0x0000ff, 0.5);
graphics.drawRect(150, 150, 100, 100);
graphics.endFill();
graphics.position.set(100, 100);
app.stage.addChild(graphics);// 资源管理
PIXI.Assets.add("vite", "./textuer/vite.svg");const texturePromise = PIXI.Assets.load(['vite']);
texturePromise.then((textures) => {const sprite = new PIXI.Sprite(textures.vite);sprite.x = app.screen.width / 2;sprite.y = app.screen.height / 2;sprite.anchor.set(0.5);sprite.scale.set(1.5);app.stage.addChild(sprite);})document.body.appendChild(app.view as any);

添加字体

  • PixiJS 使用 Text 来创建字体样式。
import * as PIXI from "pixi.js";const app = new PIXI.Application({width: window.innerWidth,height: window.innerHeight,background: 0x1099bb,resolution: window.devicePixelRatio || 1,
});const text = new PIXI.Text("hello world", {fontFamily: "Arial",fontSize: 80,fill: 0xff000,align: "center",
});text.x = app.screen.width / 2 - 80;
text.y = app.screen.height / 2 - 80;app.stage.addChild(text);document.body.appendChild(app.view as any);

使用滤镜和效果

  • 你可以为精灵和图形应用多种视觉效果,如模糊、颜色调整等。
import * as PIXI from "pixi.js";const app = new PIXI.Application({width: window.innerWidth,height: window.innerHeight,background: 0x1099bb,resolution: window.devicePixelRatio || 1,
});// 创建纹理
const texture = PIXI.Texture.from("./texture/vite.svg");
// 创建精灵
const sprite = new PIXI.Sprite(texture);
//  设置精灵位置
sprite.x = app.screen.width / 2;
sprite.y = app.screen.height / 2;app.stage.addChild(sprite);// 添加动画
app.ticker.add((delta) => {sprite.rotation += 0.01 * delta;
});const blurFilter = new PIXI.BlurFilter();
blurFilter.blur = 2;
sprite.filters = [blurFilter];sprite.interactive = true;
sprite.on('pointerover',() => {blurFilter.blur = 0;
});sprite.on('pointerout',() => {blurFilter.blur = 2.0;
})document.body.appendChild(app.view as any);

粒子系统

  • 粒子系统是创建烟雾、火焰、雨雪等视觉效果的重要工具。PixiJS 提供了 PIXI.ParticleContainer 和 PIXI.particles.ParticleContainer 来高效处理大量粒子。
  1. 安装 PixiJS 的粒子系统模块:
npm install @pixi/particles
  1. 然后,可以创建一个简单的粒子系统:
import * as PIXI from 'pixi.js';
import { Emitter } from '@pixi/particle-emitter';// 创建一个PixiJS应用
const app = new PIXI.Application({width: window.innerWidth,height: window.innerHeight,background: 0x1099bb,resolution: window.devicePixelRatio || 1,
});// 创建一个容器来放置粒子发射器
const container = new PIXI.Container();
app.stage.addChild(container);// 粒子发射器的配置
const config = {lifetime: { min: 0.5, max: 0.5 },frequency: 0.008,spawnChance: 1,particlesPerWave: 1,emitterLifetime: 0.31,maxParticles: 1000,pos: { x: 0, y: 0 },addAtBack: false,behaviors: [{type: 'alpha',config: {alpha: {list: [{ value: 0.8, time: 0 },{ value: 0, time: 1 }]}}}]
};// 创建粒子发射器
const emitter = new Emitter(container, config);// 启动粒子发射器
emitter.emit = true;// 更新粒子发射器
app.ticker.add(() => {emitter.update(app.ticker.deltaTime * 0.001);
});document.body.appendChild(app.view as any);

物理引擎集成

  • 在游戏开发中,物理引擎用于处理碰撞、重力和其他物理效果。常用的物理引擎有 Matter.js 和 Box2D。下面以 Matter.js 为例。
  1. 安装 Matter.js:
npm install matter-js
  1. 然后,集成到 PixiJS 应用中:
import * as PIXI from 'pixi.js';
import Matter from 'matter-js';// 创建一个PixiJS应用
const app = new PIXI.Application({width: window.innerWidth,height: window.innerHeight,background: 0x1099bb,resolution: window.devicePixelRatio || 1,
});// 创建 Matter.js 引擎
const engine = Matter.Engine.create();
const world = engine.world;// 创建地面
const ground = Matter.Bodies.rectangle(400, 580, 810, 60, { isStatic: true });
Matter.World.add(world, [ground]);// 创建可移动的物体
const box = Matter.Bodies.rectangle(400, 200, 80, 80);
Matter.World.add(world, [box]);const texture = PIXI.Texture.from("./texture/vite.svg");
// 创建精灵
const sprite = new PIXI.Sprite(texture);
//  设置精灵位置
sprite.x = app.screen.width / 2;
sprite.y = app.screen.height / 2;
app.stage.addChild(sprite);app.ticker.add(() => {Matter.Engine.update(engine); // 更新物理引擎// 更新 PixiJS 中的图形位置sprite.x = box.position.x;sprite.y = box.position.y;sprite.rotation = box.angle;
});Matter.Events.on(engine, 'collisionStart', (event) => {const pairs = event.pairs;pairs.forEach(pair => {console.log('Collision detected between', pair.bodyA, 'and', pair.bodyB);});
});document.body.appendChild(app.view as any);

联系我们

  1. 关注我们
  1. 联系作者

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1552763.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

文件名:\\?\C:\Windows\system32\inetsrv\config\applicationHost.config错误:无法写入配置文件

文件名: \\?\C:\Windows\system32\inetsrv\config\applicationHost.config 错误:无法写入配置文件 解决办法&#xff1a; 到C:\inetpub\history中找到最近一次的【CFGHISTORY_00000000XX】文件&#xff0c;点击进去找到applicationHost.config文件&#xff0c;用其覆盖C:\Win…

C++ 游戏开发

C游戏开发 C 是一种高效、灵活且功能强大的编程语言&#xff0c;因其性能和控制能力而在游戏开发中被广泛应用。许多著名的游戏引擎&#xff0c;如 Unreal Engine、CryEngine 和 Godot 等&#xff0c;都依赖于 C 进行核心开发。本文将详细介绍 C 在游戏开发中的应用&#xff0…

B. Brightness Begins Codeforces Round 976 (Div. 2)

原题 B. Brightness Begins 解析 Hint 1 第 i 个灯泡最终状态与 n 的大小无关 Hint 2 第 i 个灯泡最终状态与 i 的约数数量的奇偶性相关 Solution 对任意灯泡 i , 它的最终状态由其约数数量的奇偶性相关, 如果 i 有偶数个约数, 那么会是亮的, 否则会是暗的. 换句话说, 如…

使用Materialize制作unity的贴图,Materialize的简单教程,Materialize学习日志

Materialize 官网下载地址&#xff1a;http://boundingboxsoftware.com/materialize/ github源码地址&#xff1a;https://github.com/BoundingBoxSoftware/Materialize 下载地址&#xff1a;http://boundingboxsoftware.com/materialize/getkey.php 下载后解压运行exe即可 …

安装epic games错误码2738解决(安装ue错误码2738)

这个错误不好找到解决方案&#xff0c;尝试删除注册表以及通过电脑管家下载安装都不生效&#xff0c;仍然会错误2738。直到找到了这个解决方案。 1.cmd然后右键以管理员身份运行&#xff0c; 2.cd %windir%\syswow64进入该目录 3.reg delete “HKCU\SOFTWARE\Classes\Wow6432No…

C语言 | Leetcode C语言题解之题451题根据字符出现频率排序

题目&#xff1a; 题解&#xff1a; #define HASH_FIND_CHAR(head, findint, out) HASH_FIND(hh, head, findint, sizeof(char), out) #define HASH_ADD_CHAR(head, intfield, add) HASH_ADD(hh, head, intfield, sizeof(char), add)struct HashTable {char key;int val;UT_ha…

【STM32单片机_(HAL库)】4-4【定时器TIM】脉冲计数配置步骤及实验

脉冲计数配置步骤 1.硬件 STM32单片机最小系统按键模块 2.软件 定时器HAL驱动层文件添加counter驱动文件添加GPIO常用函数main.c程序 #include "sys.h" #include "delay.h" #include "led.h" #include "uart1.h" #include "…

6.3 API网关 架构模式 分类 和 应用实践

6.3 API网关 架构模式 分类 和 应用实践 目录概述需求&#xff1a; 设计思路实现思路分析1.反向代理模式2.微服务模式3.单体模式4.服务网格模式 分类&#xff1a;1.2.1 按功能分类3.2.2 按部署方式分类4.2.3 按协议支持分类&#xff1a; 应用实践&#xff1a; 参考资料和推荐阅…

Windows 开发工具使用技巧 QT使用安装和使用技巧 QT快捷键

一、QT配置 1. 安装 Qt 开发框架 1、下载 1、进入下载地址 下载地址1 (官方, 需注册账号)&#xff1a; https://www.qt.io/download下载地址2&#xff08;推荐&#xff09;&#xff1a; http://download.qt.io/http://download.qt.io/archive/qt/ &#xff08;或更直接的…

植物叶片病害检测数据集 5100张 29类 带标注 voc yolo

植物叶片病害检测数据集 5100张 29类 带标注 voc yolo 植物叶片病害检测数据集 名称 植物叶片病害检测数据集 (Plant Leaf Disease Detection Dataset) 规模 图像数量&#xff1a;5154张图像。类别&#xff1a;29种病害类型。分类名: (图片张数&#xff0c;标注个数) Tomato…

【CSS3】css开篇基础(1)

1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 亲爱的朋友们&#x1f44b;&#x1f44b;&#xff0c;这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章&#xff0c;请别吝啬你的点赞❤️❤️和收藏&#x1f4d6;&#x1f4d6;。如果你对我的…

通信工程学习:什么是DQDB分布式队列双总线

DQDB&#xff1a;分布式队列双总线 DQDB&#xff08;Distributed Queue Dual Bus&#xff09;&#xff0c;即分布式队列双总线&#xff0c;是美国电气电子工程师学会(IEEE)802.6标准中定义的一种城域网(MAN)数据链路层通信协议。该协议主要用于城域网的数据、语音和视频传输&am…

前端工程化17-邂逅原生的ajax、跨域、JSONP

5、邂逅原生的ajax 5.1、什么是ajax AJAX 全称为Asynchronous Javascript And XML&#xff0c;就是异步的 JS 和 XML。通过AJAX可以在浏览器中向服务器发送异步请求&#xff0c;最大的优势&#xff1a;页面无刷新获取数据。AJAX 不是新的编程语言&#xff0c;而是一种将现有的…

DC00025【含论文】基于协同过滤推荐算法springboot视频推荐管理系统

1、项目功能演示 DC00025【含文档】基于springboot短视频推荐管理系统协同过滤算法视频推荐系统javaweb开发程序设计vue 2、项目功能描述 短视频推荐系统分为用户和系统管理员两个角色 2.1 用户角色 1、用户登录、用户注册 2、视频中心&#xff1a;信息查看、视频收藏、点赞、…

分支和循环(1)

目录 前言 1.什么是语句&#xff1f; 2.分支语句&#xff08;选择语句&#xff09; 2.1 if 语句 2.2if书写格式形式的对比 2.3 if 练习 2.4 switch 语句 2.5 switch 练习 总结 前言 分支合循环首先就是要有良好的代码风格&#xff0c;缩进得当&#xff0c;要不然真的很…

横排文字、图层蒙版-1(2024年09月30日)

2024年09月30日 记录_导读 2024年09月30日 10:13 关键词 优惠券 设计 图层 背景 元素 调整 画笔工具 颜色 大小 位置 复制 移动 添加涂层 多选 显示 PS 元素文件 隐藏 使用规则 Logo 全文摘要 通过在Photoshop中精心操作图层&#xff0c;包括复制、移动和调整设置&#xf…

结构型模式-适配器-桥接-外观-代理

适配器模式 是什么 将一个类的接口转换成客户希望的另外一个接口 解决接口不兼容问题,复用之前的代码 实例 public class PoliceCarAdapter extends CarController { private PoliceSound sound;//定义适配者PoliceSound对象 private PoliceLamp lamp;//定义适配者Polic…

虚拟机U盘启动

二、注意事项 1、正确顺序是先插入U盘启动盘&#xff0c;再打开虚拟机&#xff0c;否则虚拟机无法检测到U盘&#xff1b; 2、如果已经打开虚拟机&#xff0c;则需关闭&#xff0c;插入U盘后重新开启。 3、设置好后如果换另一个U盘进行U盘启动&#xff0c;以下步骤要重新再设置&…

Python核心知识:pip使用方法大全

什么是 pip&#xff1f; pip 是 Python 的包管理工具&#xff0c;允许用户安装、升级和管理 Python 的第三方库和依赖。它极大地简化了开发过程&#xff0c;使开发者可以轻松地获取并安装所需的软件包。pip 已成为 Python 项目中最常见的包管理工具&#xff0c;并且自 Python …

windows C++-UWP 应用中使用 HttpRequest 类

在 UWP 应用中使用 HttpRequest 类 本节演示在 UWP 应用中如何使用 HttpRequest 类。 应用程序会提供一个输入框&#xff0c;该输入框定义了一个 URL 资源、用于执行 GET 和 POST 操作的按钮命令和用于取消当前操作的按钮命令。 使用 HttpRequest 类 1. 在 MainPage.xaml 中…