cocos creator 文件數據讀寫,用戶數據存儲

Json文件的讀取:

//load()方法,數據文件必須放到resources下
cc.loader.load(cc.url.raw('resources/data.json'), function(err,res) {
    if (err) {
        cc.log(err);
    }else{
        let list=res;
        cc.log("load:");
        cc.log("list:"+list.name);
    }
});

//louadRes()方法,默認路徑就是resources
cc.loader.loadRes('data', function(err,res){
    if (err) {
        cc.log(err);
    }else{
        let list=res;
        cc.log("loadRes:");
        cc.log("list:"+list.sex);
    }
});

注意:當使用以上代碼還報文件不存在或Download text failed的錯,那就要檢查下資源管理器裏是不是有兩個resources文件夾,其中一個是最近新建的,另一個可能是以前新建的但是被刪除過,但是刪除不徹底,因爲cocos creator裏面的資源都是有一個唯一標識的uuid,所以,還必須找到E:\Projects\你的項目\library\uuid-to-mtime.json這個文件,在裏面找到之前的resources文件uuid,先剪切放到文本文件,然後保存uuid-to-mtime.Json,重啓軟件,看是否能進去,不能的話再把剪切出來的uuid複製回去,在重啓就可以了。

Json文件的寫入:

//writeToFile()寫入數據到文件,存儲格式爲json,讀取數據用load()方法
if(cc.sys.isNative) {
    cc.log("Path:"+jsb.fileUtils.getWritablePath());
    cc.log( jsb.fileUtils.writeToFile({"new":"value"},jsb.fileUtils.getWritablePath()+'data.json'));


    cc.log("fullPathForFilename:"+jsb.fileUtils.fullPathForFilename("resources/data.json"));
 }
//writeStringToFile()寫入數據到文件,存儲格式爲xml,不是Json格式
cc.log("writeStringToFile:"+jsb.fileUtils.writeStringToFile('{"a":"b","c":"d"}', jsb.fileUtils.getWritablePath()+'kk.json'));
cc.log("getValueMapFromFile:"+JSON.stringify(jsb.fileUtils.getValueMapFromFile(jsb.fileUtils.getWritablePath()+"kk.json")));

var arry=JSON.stringify(jsb.fileUtils.getStringFromFile(jsb.fileUtils.getWritablePath()+"kk.json"));
cc.log("arry:"+arry);

cc.loader.load(jsb.fileUtils.getWritablePath()+"kk.json", function(err,res) {
if (err) {
   	cc.log(err);
}else{
  	 let list=res;
  	 cc.log("list:"+list.a);
}
});

存儲和讀取用戶數據

存儲數據

cc.sys.localStorage.setItem(key, value)

上面的方法需要兩個參數,用來索引的字符串鍵值 key,和要保存的字符串數據 value。

假如我們要保存玩家持有的金錢數,假設鍵值爲 gold:

cc.sys.localStorage.setItem(‘gold’, 100);

對於複雜的對象數據,我們可以通過將對象序列化爲 JSON 後保存:

userData = {
    name: 'Tracer',
    level: 1,
    gold: 100
};
 
cc.sys.localStorage.setItem('userData', JSON.stringify(userData));

讀取數據

cc.sys.localStorage.getItem(key)

和 setItem 相對應,getItem 方法只要一個鍵值參數就可以取出我們之前保存的值了。對於上文中儲存的用戶數據:

var userData = JSON.parse(cc.sys.localStorage.getItem('userData'));

移除鍵值對
當我們不再需要一個存儲條目時,可以通過下面的接口將其移除:

cc.sys.localStorage.removeItem(key)

數據加密

對於單機遊戲來說,對玩家存檔進行加密可以延緩遊戲被破解的時間。要加密存儲數據,只要在將數據通過JSON.stringify 轉化爲字符串後調用你選中的加密算法進行處理,再將加密結果傳入 setItem 接口即可。

您可以搜索並選擇一個適用的加密算法和第三方庫,比如 encryptjs, 將下載好的庫文件放入你的項目,存儲時:

var encrypt=require('encryptjs');
var secretkey= 'open_sesame'; // 加密密鑰
 
var dataString = JSON.stringify(userData);
var encrypted = encrypt.encrypt(dataString,secretkey,256);
 
cc.sys.localStorage.setItem('userData', encrypted);

讀取時:

var cipherText = cc.sys.localStorage.getItem('userData');
var userData=JSON.parse(encrypt.decrypt(cipherText,secretkey,256));

注意 數據加密不能保證對用戶檔案的完全掌控,如果您需要確保遊戲存檔不被破解,請使用服務器進行數據存取。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章