1. 程式人生 > >【Cocos creator】檔案資料讀寫,使用者資料儲存

【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複製回去,在重啟就可以了。

接著是Json檔案的寫入:
  //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 creatorcocos 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.1HTML標籤自動轉義導致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

pythonPython 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的文件讀