创建数据服务单例,实现本地数据读取
到目前为止,我们的小游戏一直都在内存中运行,还没有与硬盘产生联系。本课尝试将用户、系统的分数存入本地,并且在下次游戏启动的时候将分数的历史数据再读取出来。
记录时机选择在游戏结束时,记录内容为每次的玩家得分、系统得分。下面来创建数据服务模块,在src\managers目录下新建一个data_service.js文件,具体如代码清单1-1所示。
代码清单1-1 创建数据服务模块
这个文件做了什么?
❑DataService类包含两个方法,一读一写,writeLocalData用于写数据,readLocalData用于读数据。读与写都使用同步接口,这样操作比较简单。
❑第16行,wx.setStorageSync是同步写入缓存的接口。第26行,getStorageSync是同步读取缓存的接口。为方便保持读写的缓存名称一致,第2行定义了一个常量LOCAL_DATA_NAME。
❑LOCAL_DATA_NAME是一个数据缓存的键名。第9行,在保存数据之前,先从本地缓存中以此名称读取缓存对象。第10行,每次保存分数数据,都在这个对象上新增一个键值对,此时键为key,是由当前时间转换而来的本地字符串。
❑数据服务模块使用单例模式,第30行直接导出了一个DataService类的实例。
第16行中的wx.setStorageSync是同步调用接口,它的每次调用都是没有调用状态返回的。只有异步调用接口会在每次调用后,在success回调参数对象中返回一个errMsg消息,具体如下:
wx.getStorageSync接口的使用与之同理。
下面开始消费数据服务模块(DataService)。看一下game_index_page.js文件中的最终消费代码,如代码清单1-2所示。
代码清单1-2 消费数据服务模块
上面的代码发生了什么变化?
❑第3行引入了新创建的模块单例。
❑end方法是退出游戏主页时执行的方法,退出游戏主页时是记录得分的合适时机。第15行记录得分数据。第17行与第18行取出得分数据并在控制台打印。
看一下第18行在Console面板中的打印结果,如图1-1所示。
图1-1 在Console面板中的打印结果
注意,打印信息是有折叠的,展开后可以查看所有内容。
完成实践后,重新编译测试,界面效果没有变化。