使用 Pixi.js 插件实现探险者小游戏(一)

news/2025/3/11 13:07:21/文章来源:https://www.cnblogs.com/laozhenHome/p/18764232

什么是 Pixi

Pixi 是一个非常快的 2D sprite 渲染引擎。使用它你可以轻松的利用 JavaScript 和其他 HTML5 技术制作游戏和应用程序。
Pixi 的官网地址:https://pixijs.com/
本游戏使用的是 Pixi 的 V4.5.5 版本,官网最新版本更新到了 V8.x,两个版本 API 相差很大,建议大家学习最新版本。从 github 官网上下载 V4.5.5 版本:https://github.com/pixijs/pixijs/releases

安装 Pixi

Pixi.js V4.x 不支持 npm 安装,我们从 github 上下载下来后直接通过 script 标签引入。

<script src="./public/pixi.4.5.5.min.js"></script>

创建应用和舞台 stage

首先,我们使用 Pixi 的 Application 对象创建一个矩形显示区域,它会自动生成一个 HTML <canvas> 元素;接着,我们把应用的视图插入到 DOM 中。初始化应用时可以设置很多属性,在这里我们只配置展示区域大小和背景色。

// 创建PIXI应用
const app = new PIXI.Application({width: 600,height: 600,forceWebGL: true, // 强制使用WebGL,默认是false,设置为true,强制使用WebGLbackgroundColor: 0x1099bb, // 背景颜色,默认是0x000000,设置为0x1099bb,背景颜色为蓝色
})// 把应用视图插入到DOM中。
document.getElementById('app').appendChild(app.view)

由于 PIXI 的方法和属性调用太深了,使用时不太方便,我们可以使用别名来简化方法和属性调用。后面代码中我们见到的以下划线开头的变量都是重新定义的。

const _Application = PIXI.Application
const _Sprite = PIXI.Sprite
const _Texture = PIXI.Texture
const _TextureCache = PIXI.utils.TextureCache
const _loader = PIXI.loader
const _utils = PIXI.utils
const _resources = PIXI.loader.resources
const _Rectangle = PIXI.Rectangle
const _Text = PIXI.Text

我们可以通过应用实例访问舞台对象,const _stage = app.stage,stage(舞台)是 Pixi 中一个特殊的根容器,所有要展示在<canvas>上的元素(图片、文字)都要装进 stage 里才能展示。调用 _stage.addChild 方法添加元素。

创建 sprite 精灵与纹理缓存

在 PIXI 中,图像被称为 sprite(精灵),它是一种特殊的图像对象。我们可以控制它们的位置、大小和其他属性,制作和控制 sprite 是我们进入游戏开发的最重要一步。
Pixi 使用 WebGL 在 GPU 上渲染图像,图像需要转换为 GPU 可以处理的东西,这个东西被称为texture(纹理)。为保证快速高效,Pixi 使用 texture cache(纹理缓存)来存储和引用你的精灵需要的所有图像。

1. 加载图像到纹理缓存

Pixi 强大的 loader(加载器)对象可以加载任何类型的图像,我们使用 loader 加载器来加载图像,加载的图像会缓存到纹理缓存中。

// 我们可以链式加载图像,并给加载的每个图像指定别名
_loader.add('wallImg', 'images/1.png') // 加载的图片1是砖块,我们指定别名为wallImg.add('catImg', 'images/2.png').add('devilImg', 'images/3.png').add('treasureImg', 'images/4.png').load(intLoad) // intLoad是一个回调函数,表示图像加载完成后要进行的操作// 也可以把图片放到一个数组中进行加载
_loader.add(['images/1.png', 'images/2.png', 'images/3.png', 'images/4.png']).load(intLoad)

注意:加载图像要使用 anywhere 或者 http-server 起一个本地服务,否则会提示加载图像跨域。

2. 从纹理缓存中获取纹理并创建精灵

图片加载完后我们就可以从纹理缓存中获取图像对应的纹理,根据PIXI.Sprite创建精灵对象,然后把精灵对象放入舞台 stage 中就可以展示了。这些操作要在加载图片完成后的回调函数中进行。我们可以对精灵对象设置大小、坐标位置、缩放比例、旋转角度、透明度等属性。
精灵默然展示在可视区的左上角,水平向右为 X 轴正方向,垂直向下为 Y 轴的正方向。

_loader.add('wallImg', 'images/1.png') // 加载的图片1是砖块,我们指定别名为wallImg.add('catImg', 'images/2.png').add('devilImg', 'images/3.png').add('treasureImg', 'images/4.png').load(intLoad) // intLoad是一个回调函数,表示图像加载完成后要进行的操作function intLoad(){let texture = _TextureCache['wallImg'] // 从纹理缓存中获取图像对应的纹理let sprite = new _Sprite(texture) // 根据纹理生成一个精灵对象_stage.addChild(sprite) // 把精灵对象放入舞台容器// 控制精灵坐标位置,可以使用x、y属性,也可以使用position设置// sprite.x = 100// sprite.y = 100sprite.position.set(100, 100)// 设置精灵的大小sprite.width = 40sprite.height = 40// 设置精灵的缩放比例,可以单个轴方向上缩放,也可以同时缩放// sprite.scale.x = 0.5// sprite.scale.y = 0.5sprite.scale.set(1)// 精灵旋转,旋转点为精灵的左上角。顺时针为正,逆时针为负sprite.rotation = Math.PI / 4 // 顺时针旋转90度。// 精灵透明度设置sprite.alpha = 0.5// 隐藏精灵sprite.visible = false// 更换精灵,会有同一个精灵有不同纹理的场景。飞机正常状态切换到爆炸状态sprite.texture = _TextureCache['catImg']}

创建游戏中涉及到的所有精灵,代码如下:

      _loader.add('wallImg', 'images/1.png').add('catImg', 'images/2.png').add('devilIMg', 'images/3.png').add('treasureImg', 'images/4.png').load(intLoad)function intLoad() {// 创建砖块精灵const wallSprite = new _Sprite(_TextureCache['wallImg'])wallSprite.width = 40wallSprite.height = 40_stage.addChild(wallSprite)// 创建猫精灵const catSprite = new _Sprite(_TextureCache['catImg'])catSprite.width = 40catSprite.height = 40catSprite.position.set(40, 0)_stage.addChild(catSprite)// 创建恶魔精灵const devilSprite = new _Sprite(_TextureCache['devilIMg'])devilSprite.width = 40devilSprite.height = 40devilSprite.position.set(80, 0)_stage.addChild(devilSprite)// 创建宝物精灵const treasureSprite = new _Sprite(_TextureCache['treasureImg'])treasureSprite.width = 40treasureSprite.height = 40treasureSprite.position.set(120, 0)_stage.addChild(treasureSprite)}

页面展示如下图所示,这节我们主要学习如何创建精灵图,下一节就要让这些精灵图动起来了。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【设计模式】利用组合模式带你走进树形结构的世界

概述对于这个图片肯定会非常熟悉,上图我们可以看做是一个文件系统,对于这样的结构我们称之为树形结构。在树形结构中可以通过调用某个方法来遍历整个树,当我们找到某个叶子节点后,就可以对叶子节点进行相关的操作。可以将这颗树理解成一个大的容器,容器里面包含很多的成员…

20250311

1. 沪镍还有两个上涨波段

【设计模式】从智能音箱到软件设计:探索外观模式的实际应用案例

概述 有些人可能炒过股票,但其实大部分人都不太懂,这种没有足够了解证券知识的情况下做股票是很容易亏钱的,刚开始炒股肯定都会想,如果有个懂行的帮手就好,其实基金就是个好帮手,支付宝里就有许多的基金,它将投资者分散的资金集中起来,交由专业的经理人进行管理,投资于…

PMC必须要懂的四个关键流程:生产、库存、交期全过程解析!

PMC(生产计划与物料控制)这个岗位,看起来就是三个字,但实际干起来,简直是让人上蹿下跳、手忙脚乱。一边要盯着生产线, 一边要和供应商、采购、销售对接,稍微一个环节没控好,就可能导致生产停滞、库存爆仓、交期延误,直接影响公司运营。 很多PMC天天在救火,但其实掌握…

JavaScript HTML DOM - 改变 HTML 功能 用法运用 详解

JavaScript中的HTML DOM提供了强大的功能来改变HTML文档的内容和结构。通过JavaScript,我们可以动态地更新网页上的文本、属性、样式以及整个HTML结构。以下是对这些功能的详细解释和用法示例: 一、改变HTML内容使用innerHTML:innerHTML属性用于获取或设置元素的HTML内容。这…

20241905 2024-2025-2 《网络攻防实践》 第2次作业

1. 实验内容 本次实验为网络信息收集技术,主要有以下五个任务选择一个DNS域名进行查询获取信息 通过IP地址查询地理位置的信息 使用nmap扫描靶机环境 使用nessus扫描靶机环境 通过搜索引擎查询自己的隐私和信息泄露问题结合实验内容阅读书本,总结知识如下:网络踩点:攻击者通…

Ubuntu 20.4安装.Net 9

20.4默认包时没有.Net 9 需要用脚本形式安装wget https://dot.net/v1/dotnet-install.sh -O dotnet-install.sh给执行权限chmod +x ./dotnet-install.sh可以通过 --channel 参数更改特定主要版本来指示特定版本。 以下命令安装 .NET 9.0 SDK。./dotnet-install.sh --channel 9.…

用DeepSeek+可灵AI+剪映制作哪吒2走T台秀AI视频 (保姆级教程)

内容首发周老师的付费社群,挑其中部分内容免费同步给公号读者今天给大家分享如何利用DeepSeek这类AI工具,制作哪吒2走T台秀视频,保姆级的制作方法,简单易懂,小白也能轻松上手。 关键操作,分为四步:1、用DeepSeek生成提示词 2、用AI生成图片 3、图生视频 4、视频剪辑合并…

修改Python的pip默认安装路径

修改Python的pip默认安装路径 修改site.py文件 查看pip下载位置 python -m site修改site.py文件内容 site.py文件位置在于python安装位置打开文件修改几处内容将ENABLE_USER_SITE=None改为ENABLE_USER_SITE=True修改USER_SITE和USER_BASEUSER_SITE修改的文件内容:USER_BASE修改…

Kubernetes 创建 Deployment 的完整流程解析

Kubernetes 创建 Deployment 的完整流程解析 当在 Kubernetes 中执行 kubectl apply -f deployment.yaml 时,背后发生了什么?本文将深入解析从 YAML 文件到运行 Pod 的完整流程。执行 kubectl apply -f deployment.yaml 后,涉及的组件和流程如下:apiVersion: apps/v1 kind:…

【设计模式】如何使用适配器模式让不兼容的类协同工作?

概述 如果去欧洲国家旅游的话,他们的插座如下图最左边,是欧洲标准。而我们使用的插头如下图最右边的。因此我们的笔记本电脑,手机在当地不能直接充电。所以就需要一个插座转换器,转换器第1面插入当地的插座,第2面供我们充电,这样使得我们的插头在当地能使用。生活中这样的…

一键部署QwQ-32B推理模型,2种方式简单、快速体验

QwQ-32B推理模型正式发布并开源,凭借其卓越的性能和广泛的应用场景,迅速在全球范围内获得了极高的关注度。基于阿里云函数计算 FC提供算力,Serverless+ AI 云原生应用开发平台 CAP现已提供模型服务、应用模板两种部署方式辅助您部署QwQ 32B系列模型。您选择一键部署应用模板…