本地化存储
单机游戏或者不是特别重要的游戏数据,我们往往选择将数据存储在本地,Cocos为我们提供了localStorage
模块来操作。Cocos提供的localStorage在网页端的实现为localStorage,在原生上为Sqlite。本框架在该基础上做了一些优化,取名为SqlUtil。
改良原因
- 目前所有的浏览器中都会把localStorage的值类型限定为string类型
- 明文存储
主要是因为存储都为string类型,对我们对类型处理和json序列化需要重复操作,不太方便,这是我们主要改良点,第二点加密方案,仅是一种优化方案。
改良方式
对症下药,我们能否提前定义好类型,让数据返回时就处理好数据类型的问题呢?
所以,我们仅需对下面这个api做出处理就可以了
1 | let data = sys.localStorage.getItem(key); |
我们重新定义一个方法
1 | get(key, type){ |
这样,我们就达到要求了,同时我们可能希望没有这个值的时候,能够使用一个默认值,那么还可以传一个默认值进去
1 | get(key, type, default){ |
这样传递参数似乎有点多,我们考虑下,是否default也是一种数据类型,而且应该和我们期望的数据类型是一致的,所以修改下
1 | get(key, default){ |
至此,我们的改良方案就结束了。
关于加密方案
我选取的是aes加密,所以安全系数一般,但是也可以防止那些直接伸手的了,还是可以的。当然,我们调试的时候,其实并不想加密,那么可以做个例外
1 | set(){ |
继续优化
又到出题目时间了~
- 我们存储时,需要区分用户数据和系统数据,我们要清空所有用户数据,但不想清除系统数据,怎么做?
- 在原生上,存储和获取,使用的是线程操作,会让游戏卡顿,如何优化?
系列文章
该框架开发的小游戏:翻棋子游戏
- 如需2.x版本,请看CCCLibs仓库该仓库并没有整理,请自行参考
有任何建议或者疑问,可以关注作者公众号
原文链接: https://blog.xyzzlky.cn/posts/fe963542/
版权声明: 转载请注明出处.