这两天用到了存储玩家本地数据,对于我这种小白,看了好多各种大神写的文章,下面只是我自己的理解,还望大神勿喷哦。
还是先贴代码,后面在解释啊。
创建一个脚本,名字大家随意啊。哈哈。
GAME_STATE_ENCRYPTION_XXTEA="XMJ"
GAME_STATE_ENCRYPTION_OPERATION_SAVE="save"
GAME_STATE_ENCRYPTION_OPERATION_LOAD="load"
DataStore = class( "DataStore")
function DataStore:init()
self._dataStore = {}
self._gameState = require( cc.PACKAGE_NAME..".cc.utils.GameState") --初始化gamestate(这个类是quick 自己api里面封装的)
self._gameState.init( function(param)
local returnValue = nil
if param.errorCode then
printError( "errorCode",param.errorCode )
else
if param.name == GAME_STATE_ENCRYPTION_OPERATION_SAVE then
local str = json.encode( param.values )
str = crypto.encryptXXTEA( str,GAME_STATE_ENCRYPTION_XXTEA ) --使用 XXTEA 算法加密内容
returnValue = { data = str }
elseif param.name == GAME_STATE_ENCRYPTION_OPERATION_LOAD then
local str = crypto.decryptXXTEA( param.values.data,GAME_STATE_ENCRYPTION_XXTEA ) --使用 XXTEA 算法解密内容
returnValue = json.decode( str )
end
end
return returnValue
end,GAME_STATE_ENCRYPTION_FILENAME,GAME_STATE_ENCRYPTION )
if io.exists( self._gameState.getGameStatePath() ) then
self._dataStore = self._gameState.load()
print( "savePath:"..self._gameState.getGameStatePath() )
end
end
--添加数据
function DataStore:setData( __key,__value)
self._dataStore[ __key ] = __value
self._gameState.save( self._dataStore )
end
--获取数据
function DataStore:getData( __key )
return self._dataStore[ __key ]
end
return DataStore
-----------------------------------------------------------现在介绍一些Quick 的 GameState------------------------------------------------------------
GameState是quick-cocos2d 中自有的一个用户数据存储类。如果你要用可以看一下 在framework/cc/utils/ 下
我用到的有
GameState.init(eventListener_,stateFilename_,secretKey_) 初始化、
GameState.load() 载入数据、
GameState.save(newValues) 保存数据、
GameState.getGameStatePath() 获取保存文件路径。
--------------------------------------------------------------------------------------------------------------------------------------
GameState.init(eventListener_,secretKey_)
参数
1.eventListener_,是载入或保存操作的时候调用的函数。
2.stateFilename_是保存的文件名,如果为空默认的是state.txt,该文件会被保存到device.writablePath下。
3.secretKey_是 校验文件时所用到的密钥。
详细说下 eventListener(param)函数
param 有两个值为 {name = "",errorCode = nil }
name 又有两种值分别是 "load"和"save" (载入 or 保存)
errorCode又有三种值: GameState.ERROR_INVALID_FILE_CONTENTS--不合法的文件内容,即取出来的内容不是一个table GameState.ERROR_HASH_MISS_MATCH--文件被人为更改过 GameState.ERROR_STATE_FILE_NOT_FOUND--文件不存在