6.pixi.js编写的塔防游戏(类似保卫萝卜)-游戏资源打包逻辑

news2024/9/28 3:25:55

 游戏说明

一个用pixi.js编写的h5塔防游戏,可以用electron打包为exe,支持移动端,也可以用webview控件打包为app在移动端使用

环境说明

  cnpm@6.2.0  
  npm@6.14.13  
  node@12.22.7  
  npminstall@3.28.0  
  yarn@1.22.10  
  
  npm config list  
  electron_mirror = "https://npm.taobao.org/mirrors/electron/"  
  home = "https://www.npmjs.org"  
  registry = "https://registry.npmmirror.com/"  

游戏资源打包应用:

可以让资源一次请求,就能获取所有资源。打包过后也可以采用一定的方法对资源进行加密,在没用获得源码的情况下想要获得资源文件是比较困难的。

资源打包:

项目中运行资源 打包

npm run devgen

 需要的库:

@zip.js/zip.js@2.4.10

 在网页上我们可以通过上传文件夹的思路获取文件夹下面的所有文件

 <input type="file" multiple="multiple" webkitdirectory="" directory id="allSpineFile" />

通过监听change事件,获取event对象中的files对象 

然后通过FileReader对象读取文件对象中的数据转换为base64或者字符串然后将他们放在一个json字符串上

然后我们将json字符串转化为blob对象

const b = new Blob([JSON.stringify(obj)])

然后我们通过zip.js对json对象的blob进行打包。

关于加密:

对于异或加密:

异或加密是一种很简单的加密算法。

  • 原理:根据异或的运算规则,在二进制中,相同为0,不同为1。
  • 且:某个数与0异或等于这个数的本身,与1异或等于这个数的相反。
  • 特性:异或运算具有可逆性。
    即:若a xor b=c,则有b xor c=a (a,b,c分别表示0或1)

由上式可得,若a是发送方想要加密的明文信息,则设置一个密钥b,对a和b做异或运算,得到的c就是加密后的密文信息,可进行传输。接收方得到密文信息c后,只需要再与密钥b做异或运算,即可得到原明文信息a。

我们打包过后的对象是一个blob对象,我们可以获取blob对象的arrayBuffer然后我们循环arraybuffer对其中的二进制进行转码从而获得一个同大小的新数组

这里是核心加密方法:

    const pwdCode = [104, 104, 115, 106]
    for (let i = 0; i < uint8.length; i++) {
      const codeIndex = i % 4
      uint8[i] = uint8[i] ^ pwdCode[codeIndex]
    }

其对应的解密也是上面的代码。

当然有时候对于资源打包其实都是通过读取文件的arraybuffer对象然后写入到zip对象中在游戏运行的时候只需要去读取zip中的blob就可以了,我们这里转化为了一个大json其实是不怎么正确的做法。

关于如何将blob的图片对象预览到浏览器:

可以通过方法URL.createObjectURL(blob)来获取一个访问图片对象的url地址

这个方法获取的地址在运行中需要注意释放。

释放是通过方法:URL.revokeObjectURL(url)来释放地址

游戏运行截图:

 项目开源地址:

https://github.com/yinhui1129754/towerDefense

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

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

相关文章

配置legacyUnhandledExceptionPolicy属性防止处理异常后程序崩溃退出(C#)

这是这篇文章后面遗留的问题&#xff1a; winform中的全局异常信息_winform全局异常捕获_zxy2847225301的博客-CSDN博客 就是线程抛出异常后&#xff0c;被AppDomain.CurrentDomain.UnhandledException注册的事件捕获后&#xff0c;程序依旧崩溃退出。 解决方案&#xff1a;在…

架构-嵌入式模块

章节架构 约三分&#xff0c;主要为选择题 #mermaid-svg-z6RGCDSEQT5AhE1p {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-z6RGCDSEQT5AhE1p .error-icon{fill:#552222;}#mermaid-svg-z6RGCDSEQT5AhE1p .error-text…

【产品经理】从用户体验五要素出发,谈如何设计与体验一款产品

用户体验五要素是产品人必备的知识技能&#xff0c;由于网络碎片化的了解&#xff0c;往往容易造成其高深莫测&#xff0c;晦涩难懂的形象&#xff0c;进而对其束之高阁。但实质不过是一种产品分析与设计的方法论&#xff0c;正确姿势去了解它能帮助我们更好地理解一款产品和从…

移动端小于12px的字体处理方法

今天在按设计稿坐页面时&#xff0c;遇到了下图的情况 ​​​​​ 由于浏览器对字体最小为12px的限制&#xff0c;所以我查阅资料后尝试使用transform:scale来处理 代码如下&#xff1a; <div class"icon"><span class"iconfont icon-a-xuexi3 icon-…

ZYNQ——PL端流水灯的实现

文章目录 一、介绍二、代码编写三、引脚分配四、仿真分析五、添加 ILA IP六、板上验证 一、介绍 本文介绍的是在ZYNQ 7020黑金开发板上实现PL端流水灯的例子&#xff0c;开发板上PL端的LED灯总共有4个&#xff0c;在原理图中找到 PL LED 如下图所示&#xff0c;通过看图可知&a…

【MarkDown】CSDN Markdown之四象限图quadrantChart详解

四象限图 四象限图是一种将数据分为四个象限的可视化方法。它用于在二维网格上绘制数据点&#xff0c;其中一个变量表示x轴&#xff0c;另一个变量表示y轴。根据针对正在分析的数据集的一组标准&#xff0c;将图表分成四个相等的部分来确定四个象限。经常使用四象限图来识别数…

父亲节|祝天下所有父亲节日快乐,长寿安康!

父亲节&#xff0c;是一个感谢父亲的节日。普遍认为的日期是每年6月的第三个星期日&#xff0c;在这一天世界上有52个国家和地区在过父亲节。同时注重孝道也是我们中华民族的传统文化。 在这个感恩的节日里 把最真诚美好的祝福 送给天下所有的父亲们 祝福他们 节日快乐&…

OpenAI 大模型生态

目录标题 1. 语言类大模型2. 图像多模态大模型3. 语音识别模型4. 文本向量化模型5. 审查模型6. 编程大模型1. 语言类大模型 包括GPT-3、GPT-3.5、GPT-4系列模型。并且,OpenAl在训练GPT-3的同时,训练了参数不同、复杂度各不相同的A、B、C、D四项大模型(基座模型),用于不同场景…

mysql 集群 MGR

mysql安装&#xff08;3台服务&#xff09; 1下载 wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.11-linux-glibc2.12-x86_64.tar.gz 2解压mysql wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.11-linux-glibc2.12-x86_64.tar.gz tar -zxvf…

键盘按键事件 通过键盘上下左右按键移动界面上图标

#main.c文件 #include “keyevent.h” #include int main(int argc, char *argv[]) { QApplication a(argc, argv); KeyEvent w; w.show(); return a.exec();} #include “keyevent.h”//头文件 #ifndef KEYEVENT_H #define KEYEVENT_H #include #include #include cl…

Windows安装Make工具(make.exe和mingw)

1、make.exe 官网介绍&#xff1a;Make是一个工具&#xff0c;它控制从程序的源文件生成程序的可执行文件和其他非源文件。Make从一个名为Makefile的文件中获取如何构建程序的知识&#xff0c;该文件列出了每个非源文件以及如何从其他文件中计算它。当你编写一个程序时&#x…

[性能测试工具]——Loadrunner的使用及安装指南

目录 一、基本概念 1.1 什么是性能测试&#xff1f; 1.2 性能测试和功能测试的区别&#xff1f; 1.3 什么样的软件属于性能好&#xff0c;什么样的软件属于性能不好&#xff1f; 1.4 哪些因素会影响到软件性能&#xff1f; 二、为什么对软件进行性能测试&#xff1f; 三、性…

压测工具Jmeter学习

压测工具Jmeter Jmeter介绍 Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试&#xff0c;它最初被设计用于Web应用测试&#xff0c;但后来扩展到其他测试领域。 它可以用于测试静态和动态资源&#xff0c;例如静态文件、Java 小服务程序、CGI …

Django基础入门④:数据表显示和Django模板详讲

Django基础入门④&#xff1a;数据表显示和Django模板详讲 数据表显示字段显示表单显示分块内联显示列表显示搜索栏目创建筛选排序分页导入导出 Django模板什么是模板模板使用render方法详解 &#x1f3d8;️&#x1f3d8;️个人简介&#xff1a;以山河作礼。 &#x1f396;️&…

CVPR | 时尚领域视觉语言预训练模型Kaleido-BERT

来源&#xff1a;投稿 作者&#xff1a;小灰灰 编辑&#xff1a;学姐 这是一篇在时尚领域、往细粒度方向做视觉-语言预训练的工作。 论文标题&#xff1a;Kaleido-BERT: Vision-Language Pre-training on Fashion Domain 论文链接&#xff1a;https://arxiv.org/abs/2103.1611…

深度刨析指针Advanced 2

作者主页&#xff1a;paper jie的博客_CSDN博客-C语言,算法详解领域博主 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文录入于《系统解析C语言》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白…

使用omp并行技术加速最短路径算法-迪杰斯特拉(Dijkstra)算法(记录最短路径和距离)

原理&#xff1a; Dijkstra算法是解决**单源最短路径**问题的**贪心算法** 它先求出长度最短的一条路径&#xff0c;再参照该最短路径求出长度次短的一条路径 直到求出从源点到其他各个顶点的最短路径。 首先假定源点为u&#xff0c;顶点集合V被划分为两部分&#xff1a;集合…

stable-diffusion-webui的介绍与使用——Controlnet1.1

源码地址&#xff1a;https://github.com/lllyasviel/ControlNet | 最新版本 controlnet-v1.1 论文地址&#xff1a;2302.Adding Conditional Control to Text-to-Image Diffusion Models 扩展UI地址&#xff08;需先安装sd-webui&#xff09;&#xff1a;https://github.com/M…

基于对Element UI的表单验证

文章目录 &#x1f412;个人主页&#x1f3c5;JavaEE系列专栏&#x1f4d6;前言&#xff1a;&#x1fa80;从以下源码中介绍&#xff1a;&#x1f380;这里是官网源码 &#x1f412;个人主页 &#x1f3c5;JavaEE系列专栏 &#x1f4d6;前言&#xff1a; 本篇博客主要以介绍基…

杂记——FDA获批的AI超声产品

目前&#xff0c;人工智能算法在医学图像领域发展迅猛。相对于CT、MRI等&#xff0c;人工智能在超声图像处理领域仍处于起步阶段。近年来&#xff0c;多项研究利用深度学习、计算机视觉和图像处理等技术&#xff0c;对超声图像进行自动化分析、识别和量化&#xff0c;提供辅助医…