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

news/2024/11/7 22:39:04/

引擎: 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.ppmy.cn/news/1255123.html

相关文章

Vue3动态表单

示例代码如下: // 引入需要的依赖包 import { ref, reactive } from vue; import { useForm } from /composables/useForm;// 定义表单数据模型 const formModel reactive({name: ,age: ,gender: , });// 使用自定义的useForm函数创建表单实例 const { register, …

k8s部署rocketmq单节点(server+broker+console)—— 筑梦之路

之前写过几篇关于rocketmq构建双架构镜像、docker-compose部署的文章,接上篇docker-compose部署rocketmq,这里记录下k8s下如何部署。 多架构环境下docker-compose部署rocketmq单机模式—— 筑梦之路-CSDN博客 nameserver节点 apiVersion: apps/v1 kin…

sed笔记231127 `-e`基本正则,`-E`扩展版正则

-e基本正则,-E扩展版正则 -E, -r, --regexp-extended 在脚本中使用扩展正则表达式(为保证可移植性使用 POSIX -E)。-e或 --expression 接基本正则表达式, 可多次使用,多次过滤-f 或 --file 选项接脚本文件, 注意是脚本文件, 而不是输入文件 -e可以不写…

【开源】前后端分离的在线考试系统,支持多种部署方式

在线考试系统 https://download.csdn.net/download/mo3408/88593116 在线考试系统是一种利用网络技术,实现在线出题、答题、阅卷、成绩查询等一系列考试活动的系统。它不受地理位置限制,可以实现远程考试,大大提高了考试的效率和便利性。此…

【计算机概论 ①】- 电脑:辅助人脑的好工具

目录 一、电脑硬件的五大单元 二、一切设计的起点:CPU 的架构 三、其他单元的设备 四、运行流程 五、电脑的分类 六、电脑上面常用的计算单位(容量、速度等) 操作系统跟硬件有相当程度的关联性,所以,如果不了解一…

LeetCode417. Pacific Atlantic Water Flow

文章目录 一、题目二、题解 一、题目 There is an m x n rectangular island that borders both the Pacific Ocean and Atlantic Ocean. The Pacific Ocean touches the island’s left and top edges, and the Atlantic Ocean touches the island’s right and bottom edges…

在 Qt 的文本编辑类中,document() 是一个成员函数,用于获取文档对象

在 Qt 的文本编辑类中,document() 是一个成员函数,用于获取文档对象。它返回与文本编辑器关联的 QTextDocument 对象的指针。 QTextDocument 类是 Qt 中用于处理富文本内容的类。它包含了文本内容以及相关的格式、样式和布局信息。通过 document() 函数…

SmartSoftHelp8,图片版权保护工具,水印加密文件

设置水印文本内容 设置水印位置 设置水印图片内容 设置水印图片位置 对图片进行版权保护 下载地址: https://pan.baidu.com/s/1zBgeYsqWnSlNgiKPR2lUYg?pwd8888