oops-framework框架 之 本地存储(五)

引擎: CocosCreator 3.8.0

环境: Mac

Gitee: oops-game-kit

注: 作者dgflashoops-framework框架QQ群: 628575875


简介


在CocosCreator中,本地存储主要使用sys.localStorage 接口,通过 key-value的格式进行存储。

主要接口有:

接口描述
setItem(key, value)保存指定索引的数据
getItem(key)获取指定索引的数据
removeItem(key)移除指定索引的数据
clear()清空所有数据

存储的最后数据是以sqlite数据库格式存储的。

dgflash作者分享的 oops-framework 框架是在此基础上进行的二次封装,有着如下的特点:

  • 设置用户ID,将key用户ID组合,避免存储数据被覆盖
  • 增加了MD5、AES的第三方库加密,key使用MD5加密, value使用AES加密,增加的数据的安全性
  • 在模拟器或浏览器的调试下,不会触发数据加密,方便明文调试

针对于本地存储的使用,主要有两个类:

  • StorageManager 本地存储的管理类
  • EncryptUtil NPM第三方加密库的封装类

针对于后者,需要NPM的支持安装第三方库crypto-es,在opps-framework的框架中已经配置。

这里做下简单了解:

NPM crypto-es

终端安装命令:

npm install -g yarn
yarn add crypto-es

主要接口


作者使用dgflash封装的StorageManager主要接口如下:

接口返回类型说明
init(key: string, iv: string)void初始化密钥
setUser(id: string)void初始化用户ID,默认为空
set(key: string, value: any)void存储数据
get(key: string, defaultValue: any = “”)string获取数据
getNumber(key: string, defaultValue: number = 0)number获取number类型数据
getBoolean(key: string)boolean获取boolean类型数据
getJson(key: string, defaultValue?: any)any获取Json类型数据
remove(key: string)void移除指定字段的数据
clear()void清空所有数据

注: 密钥的初始化在resources/config.json下localDataKeylocalDataIv 进行设置

我们看下关于set方法的设定:

set(key: string, value: any) {var keywords = `${key}_${this._id}`;// 检测key字段的合法性if (null == key) {console.error("存储的key不能为空");return;}// 检测是否为非调试模式,及非浏览器或模拟器if (!PREVIEW) {keywords = EncryptUtil.md5(keywords);}// 检测value字段的合法性if (null == value) {console.warn("存储的值为空,则直接移除该存储");this.remove(key);return;}if (typeof value === 'function') {console.error("储存的值不能为方法");return;}// 对value字段数据进行转换if (typeof value === 'object') {try {value = JSON.stringify(value);}catch (e) {console.error(`解析失败,str = ${value}`);return;}}else if (typeof value === 'number') {value = value + "";}// 设置value字段加密if (!PREVIEW && null != this._key && null != this._iv) {value = EncryptUtil.aesEncrypt(`${value}`, this._key, this._iv);}// 存储数据sys.localStorage.setItem(keywords, value);
}

注意: CocosCreator引擎提供的接口: setItem(key: string, value: string) value一定要为string类型,否则会报错。


这里汇总下oops-framework提供的加密库封装主要接口:

接口说明
initCrypto(key, iv)初始化加密库的key和iv
md5()获取md5加密字段
aesEncrypt()AES加密
aesDecrypt()获取AES解密数据

注: AES加密和解密的key和iv 使用的是initCrypto初始化中的字段


示例


本地存储的使用,在Oops.ts中提供的入口主要是:

// ../oops-plugin-framework/assets/core/Oop.ts
export class oops {/** 本地存储 */static storage: StorageManager = new StorageManager();
}

建议在项目启动后的某个关键点增加用户ID和加密字段的处理

// 设置用户ID
let userId = "10001";
oops.storage.setUser(uid);
// 设置加密key和vi
// 通过oops.config.game获取resources/config.json中的配置字段
let config = oops.config.game;
let key = config.localDataKey || "key";
let vi = config.localDataIv || "vi";
oops.storage.init("key", "vi");

代码中的使用示例就相对简单了, 以音效为例:

const LOCAL_STORE_KEY = "game_audio";// 保存字段
save() {// 声音音量this.local_data.volume_music = this._volume_music;// 音效音量this.local_data.volume_effect = this._volume_effect;// 声音开关this.local_data.switch_music = this._switch_music;// 音效开关this.local_data.switch_effect = this._switch_effect;let data = JSON.stringify(this.local_data);oops.storage.set(LOCAL_STORE_KEY, data);
}// 获取字段
load() {let data = oops.storage.get(LOCAL_STORE_KEY);if (data) {try {this.local_data = JSON.parse(data);this._volume_music = this.local_data.volume_music;this._volume_effect = this.local_data.volume_effect;this._switch_music = this.local_data.switch_music;this._switch_effect = this.local_data.switch_effect;}catch (e) {this.local_data = {};this._volume_music = 1;this._volume_effect = 1;this._switch_music = true;this._switch_effect = true;}}
}

感谢作者dgflash的分享,作者CSDN博客: dgflash CSDN

最后,祝大家学习和生活愉快!

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

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

相关文章

【iOS控件】—— UIPickerView的使用

【iOS控件】—— UIPickerView的使用 一. 简述UIPickerView1. 什么是UIPickerView2. UIPickerView遵守的协议 二. 测试Demo三. 总结 一. 简述UIPickerView 先看一下UIPickerView的效果图: 1. 什么是UIPickerView UIPickerView是iOS平台上的一个用户界面元素&am…

Excel导入组件的封装以及使用页面点击弹出该弹框

封装的组件 <template><el-dialogwidth"500px"title"员工导入":visible"showExcelDialog"close"$emit(update:showExcelDialog, false)"><el-row type"flex" justify"center"><div class&q…

轻松生成二维码:SpringBoot 与 ZXing 完美结合(综合指南)-开源充电桩平台(充电桩平台源码)

分享一套开源充电桩云平台&#xff08;v2.5.1&#xff09;-- 支持二轮(电动自行车)、四轮(电动汽车) 文章目录 前言一、1 前言&#xff1f;二、2 介绍QR码和ZXing三、3 springboot整合zxing添加ZXing依赖生成二维码生成条形码 分享一套开源充电桩云平台&#xff08;v2.5.1&…

JVM:强软弱虚四种引用

下面依次解释五种引用 一、强引用 把一个对象赋值给一个引用变量&#xff0c;就相当于把这个对象的强引用放到变量中。 只要对象可达&#xff0c; GC一定不会回收这个对象&#xff08;A1&#xff09; 二、软引用 当一个对象&#xff08;A2&#xff09;没有强引用时&#xff…

python 自主学习笔记

文章目录 前言相关教程模板字符串JavaScriptC#Python 临时变量C#的ValueTuplePython字典 自定义模块化封装的文件路径问题解决方案 暂时结束 前言 最近在学halcon&#xff0c;机器视觉&#xff0c;越学越发现&#xff0c;python是无法避免的语言。因为python用途实在是太广了。…

c/c++的字符和字符串输入输出

注&#xff1a; 1.下面这些为本人大学四年所用过的处理办法&#xff0c; 至今为止遇到的所有编程题都能够使用。如果需要了解更多关于putchar,cin.get,cin.getline等的请自行搜索。 2.getchar相当于获取一个字符&#xff0c;可以实现单个字符的输入以及通过循环实现多个字符输…

英语语法学习 - 每周更新学英语知识点

目录 询问 Would Some用法 Any用法 数量限定词 数量限定词之 all 和 both Everybody/Everyone 不定代词指代人 不定代词搭配“else”用法 bring It takes time to ... 询问 Would would 主语 like noun/to do? 询问他人意愿 Would you like dinner&#xff…

使用 Unsplash API 生成随机图片

Unsplash 如果你想使用免费版权的图片时&#xff0c;无论你是否用于商业用途&#xff0c;Unsplash 是不错的选择。 我自己也经常用它来制作大型背景图片 虽然他们为开发人员提供了很棒的 API&#xff0c;但他们也提供了通过 URL 访问随机图片的选项。 1. 默认随机 请看这个例子…

ChaoJi充电连接装置典型试验案例分析 GB/T 20234.1充电连接装置型式试验变化分析

GB/T 20234.1充电连接装置典型试验变化分析 1、ChaoJi充电连接装置典型试验案例分析 1.1、大功率直流充电接口 1.2、枪线尺寸、重量、面积数据对比 1.3、枪线温升对比试验 1.4、chaoji 枪线温升试验 1.5、chaoji枪线防护等级试验 1.6、GB/T 20234.4项目列表 1.7、小结 ✓ 通…

GenericServlet 和 HttpServlet

在 Java Web 开发中&#xff0c;GenericServlet 和 HttpServlet 是两个重要的类&#xff0c;用于处理客户端的请求和生成响应。它们是基于 Java Servlet API 的关键组件&#xff0c;为开发人员提供了处理 Web 请求和实现服务器端逻辑的强大工具。 GenericServlet GenericServ…

Failed building wheel for opencv-python which use PEP 517

这主要是opencv-python版本更新以后wheels也更新了&#xff0c;但是相关安装软件没有及时适配&#xff0c;所以不管是使用pip直接安装还是换源其实效果都是报错&#xff0c;解决方法就是直接指定安装旧版opencv-python完事儿&#xff0c;例如&#xff1a; pip3 install opencv…

37. 解数独

题目描述 编写一个程序&#xff0c;通过填充空格来解决数独问题。 数独的解法需 遵循如下规则&#xff1a; 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。&#xff08;请参考示例图&#xff09; …

H264初探

ref&#xff1a; 【科普】“视频”是怎么来的&#xff1f;H.264、码率这些词又是什么意思&#xff1f;_哔哩哔哩_bilibili H.264编解码原理浅析 - 知乎

基于Java SSM框架+Vue实现旅游资源网站项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架Vue实现旅游资源网站演示 摘要 本论文主要论述了如何使用JAVA语言开发一个旅游资源网站 &#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述旅游…

Elasticsearch:什么是向量数据库?

向量数据库定义 向量数据库是将信息存储为向量的数据库&#xff0c;向量是数据对象的数值表示&#xff0c;也称为向量嵌入。 它利用这些向量嵌入的强大功能来对非结构化数据和半结构化数据&#xff08;例如图像、文本或传感器数据&#xff09;的海量数据集进行索引和搜索。 向…

Linux 性能压测

目录 1、内存 (1) 查看内存指令 (2) 清理缓存 (3) swap分区的作用 2、cpu (1) 查看cpu核心数 (2) 查看cpu使用率 (3) 查看cpu使用百分比 (5) 查看cpu温度 (6) cpu压力测试 3、磁盘 (1) 查看磁盘信息 (2) 数据恢复相关 (3) 查看磁盘io (4) 磁盘压测 1、内存 (1) …

MATLAB Simulink +STM32硬件在环 (HIL)实现例程测试

MATLAB Simulink STM32硬件在环 &#xff08;HIL&#xff09;实现例程测试 &#x1f4cd;相关篇《STM32CubeMxMATLAB Simulink点灯程序》✨本例程没有使用到STM32CubeMX来创建工程&#xff08;在Simulink 中不是选择的STM32xxxbased类型的&#xff09;。 &#x1f516;STM32xxx…

基于SSM的网上手机销售系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

llama.cpp部署通义千问Qwen-14B

llama.cpp是当前最火热的大模型开源推理框架之一&#xff0c;支持了非常多的LLM的量化推理&#xff0c;生态比较完善&#xff0c;是个人学习和使用的首选。最近阿里开源了通义千问大语言模型&#xff0c;在众多榜单上刷榜了&#xff0c;是当前最炙手可热的开源中文大语言模型。…

go语言学习-并发编程(并发并行、线程协程、通道channel)

1、 概念 1.1 并发和并行 并发:具有处理多个任务的能力 (是一个处理器在处理任务)&#xff0c;cpu处理不同的任务会有时间错位&#xff0c;比如有A B 两个任务&#xff0c;某一时间段内在处理A任务&#xff0c;这时A任务需要停止运行一段时间&#xff0c;那么会切换到处理B任…