【Cocos creator】檔案資料讀寫,使用者資料儲存
【首先吐槽一下:對於Cocos creator,一方面自己對相關知識不太熟悉,但是另一方面cocos creator 的api文件也太不完善了,想實現對Json檔案進行資料讀寫的功能花了我一天時間。還好,最終在cocos中文網引擎開發人員和某個牛人的幫助下把問題解決了!!如果cocos creator 的文件在不完善,對於新入門的人真是個煎熬!】 下面直接貼程式碼。
由於cocos creator官方文件沒有完善的檔案資料讀寫api,所以只能用cocos2d-js的 jsb.fileUtils類,相關內容可以自己去查詢。以下是api連結:
http://cocos2d-x.org/docs/api-ref/js/v3x/symbols/jsb.fileUtils.html#getStringFromFile
首先是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複製回去,在重啟就可以了。
//writeToFile()寫入資料到檔案,儲存格式為xml,不是Json格式
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()寫入資料到檔案,儲存格式為json,讀取資料用load()方法
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);
}
});
相關參考:http://www.dubox.org/archives/225.html
儲存和讀取使用者資料(官方文件)
儲存資料
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));
注意 資料加密不能保證對使用者檔案的完全掌控,如果您需要確保遊戲存檔不被破解,請使用伺服器進行資料存取。
相關推薦
【Cocos creator】檔案資料讀寫,使用者資料儲存
【首先吐槽一下:對於Cocos creator,一方面自己對相關知識不太熟悉,但是另一方面cocos creator 的api文件也太不完善了,想實現對Json檔案進行資料讀寫的功能花了我一天時間。還
【C語言】檔案常用讀寫操作(含讀取學生資訊示例)
C檔案概述 檔案是指一組相關資料的有序集合。這個資料集有一個名稱,叫做檔名。實際上我們在C語言程式設計中已經多次使用了檔案。例如源程式檔案(.c)、目標檔案(.0bj)、可執行檔案(.exe)、庫檔
【課程11】檔案的讀寫
【檔案的開啟方式】 # fo = open('D:/py/file1.txt')# N = fo.read()#檔案的開啟,讀模式(檔案必須要存在)#file_object = open(file_name ,access_mode = 'r')# file_name 檔案路徑,分為相對路徑(D:/file
【8】檔案的讀寫
(1)、讀檔案的步驟: (1)開啟檔案 open(path,flag,encoding,[errors]) path:開啟路徑 flag:開啟方式 r(只讀) rb(二進位制格式) r+(可以讀寫) w(只寫,存在覆蓋,不存在建立) wb(寫入
【GDAL學習】用OGR讀寫向量資料
學習資料: 猶他州立大學:https://www.gis.usu.edu/~chrisg/python/2009/lectures/ospy_slides1.pdf 開放地理空間實驗室 http://www.osgeo.cn/python_gdal_utah_tutoria
Qt 檔案的讀寫,將讀取的資料儲存到Qvector
#include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) {
【Cocos creator】繪圖系統:Graphics元件之動態改變生成影象的透明度
在Cocos creator 中,要想在使用Graphics元件繪製圖像的過程中改變影象的透明度有兩種方法: 1.在編輯器中Graphics元件的fillColor屬性中設定; 2.通過程式碼動態設定。 drawLine:function(){ var
【cocos creator】cocos creator的官網demo小遊戲--小星星
在官網的教程基礎之上,修改了官網遺漏下的bug。雖然可以下載cocos.com官網的原始碼,直接使用,更改BUG,但對於自己一個剛接觸cocos開發新手,通過自己的努力,去發現官網的
Ionic 【tabs模板】 詳情頁重新整理以後,頁面資料不消失,點選返回按鈕可回到首頁
1.詳情頁重新整理,確保當前頁面資料不丟失 首先假設 首頁(home)跳轉到 home-details,傳遞引數code: //home.ts this.navCtrl.push(HomeDetailsPage,{ code:code }) 然後再home-det
JS:對txt檔案進行讀寫,替換和新增
親測必須將程式碼放在記事本中,改成html格式,在用IE執行(必須) <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/h
FPGA學習心得及(flash讀寫,+lwip+資料傳送等問題)
前段時間應老闆的專案需求,對硬體絲毫不懂得我開始接觸edk硬體程式設計,感覺這段時間跟硬體打交道,自己都老了不少。首先,硬體程式設計編譯很慢,編譯一次有時候得10-20分鐘,尤其是用verilog寫得程式比較大的時候。其次,除錯非常麻煩,不能像利用c或者c#那樣斷點除錯了,
【TP5.1】HTML標籤自動轉義,導致CKEditor儲存內容無法正常顯示!
問題:使用Thinkphp5.1 開發的時候顯示CKEditor儲存的內容不符合預期。 希望的樣子,肯定是不顯示<p><b>等標籤,而是下面的樣子。 因為剛開始使用TP5.1和CKEditor,所以遇到問題有點懵。立馬就去找官方文
Python-OpenCV基礎:影象的讀寫,尺寸和儲存
為什麼使用Python-OpenCV 雖然python 很強大,而且也有自己的影象處理庫PIL,但是相對於OpenCV 來講,它還是弱小很多。跟很多開源軟體一樣OpenCV 也提供了完善的python 介面,非常便於呼叫。OpenCV 的穩定版是2.4.8,最新版是4.0,包含了超過2500
【C語言實現串列埠通訊知識點整理(三)】串列埠開啟、設定資料成功後進行資料讀寫
int OpenDev(char *Dev) { int fd = open(Dev,O_RDWR | O_NOCTTY | O_NONBLOCK); if(-1 == fd) { perror("Can't Open Serial Port"); return -1;
【學習】json 檔案和 csv檔案(讀寫)
1,json json.dumps() ---將字典轉成JSON格式 import json zhidian_json=[{ 'name':'jing1', 'age':'21', }, { 'name':'jing2', 'age':'
【程式碼備忘】C++ fstream 讀寫 unicode 檔案
歡迎加入我們的QQ群,無論你是否工作,學生,只要有c / vc / c++ 程式設計經驗,就來吧!158427611 所謂的unicode檔案,無非就是在檔案頭部插入了 0xFFFE的標誌。。。讀寫的時候對應的讀寫 就可以了。 namespace fileStream
【python】Python open讀寫檔案
1.open 使用open開啟檔案後一定要記得呼叫檔案物件的close()方法。比如可以用try/finally語句來確保最後能關閉檔案。 file_object = open('thefile.txt')try: all_the_text = file_object.r
【IO】使用Properties進行資料讀寫
Properties繼承自Hashtable,使用鍵值對儲存資料,便於進行資料管理。下面是一個模擬遊戲資料儲存的例子。 import java.io.File; import java.io.Fi
【spark 讀寫資料】資料來源的讀寫操作
通用的 Load/Save 函式 在最簡單的方式下,預設的資料來源(parquet 除非另外配置通過spark.sql.sources.default)將會用於所有的操作。 Parquet 是一個列式儲存格式的檔案,被許多其他資料處理系統所支援。Spark
【Python】文件讀寫操作
class 控制臺 路徑 數據 編碼 data- ack dev dsm Python的文件讀寫有點類似php的文件讀寫。php的文件讀寫已經在《【php】讓記事本成為你調控變量的控制臺》(點擊打開鏈接)說過了,以下用一個小樣例說明Python的文件讀