优秀的编程知识分享平台

网站首页 > 技术文章 正文

Cocos Creator如何读写本地文件(cocos creator怎么打开其他项目)

nanyue 2024-08-10 18:39:30 技术文章 8 ℃

前言

一、使用localStorage存储和读取本地文件

1. 常用API

存储:cc.sys.localStorage.setItem(key, value);两个参数,用来索引的字符串键值 key,和要保存的字符串数据 value。

读取:cc.sys.localStorage.getItem(key);一个参数,只需要根据key来读取相应的值。

删除:cc.sys.localStorage.removeItem(key);移除一个存储的值后,无法再读取。

这种处理方式,类似Java中的Map。

2. 简单案例

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));和 setItem 相对应,getItem 方法只要一个键值参数就可以取出我们之前保存的值了。对于上文中储存的用户数据:

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

3.数据加密

对于单机游戏来说,对玩家存档进行加密可以延缓游戏被破解的时间。要加密存储数据,只要在将数据通过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));

注意 数据加密不能保证对用户档案的完全掌控,如果您需要确保游戏存档不被破解,请使用服务器进行数据存取。

二、使用jsb.fileUtils

1.常用API

jsb是javascript bind的代表,整个C/C++ 导出的绑定都在这个jsb里面,jsb 支持native,不支持h5(浏览器上无法运行jsb is not defined )。而且fileUtils是本地文件读写的一个工具类,全局只有一个实例。


2.简单案例

cc.Class({
    extends: cc.Component, 
    onLoad() {
        // jsb.fileUtils获取全局的工具类的实例, cc.director;
        // 如果是在电脑的模拟器上,就会是安装路径下模拟器的位置;
        // 如果是手机上,那么就是手机OS为这个APP分配的可以读写的路径; 
        // jsb --> javascript binding --> jsb是不支持h5的
        var writeable_path = jsb.fileUtils.getWritablePath();
        console.log(writeable_path);
  
        // 要在可写的路径先创建一个文件夹
        var new_dir = writeable_path + "new_dir";
        // 路径也可以是 外部存储的路径,只要你有可写外部存储的权限;
        // getWritablePath这个路径下,会随着我们的程序卸载而删除,外部存储除非你自己删除,否者的话,卸载APP数据还在;
        if(!jsb.fileUtils.isDirectoryExist(new_dir)) {
            jsb.fileUtils.createDirectory(new_dir);
        } else {
            console.log("dir is exist!!!");
        }
        
        // 读写文件我们分两种,文本文件, 二进制文件;
        // (1)文本文件的读,返回的是一个string对象
        var str_data = jsb.fileUtils.getStringFromFile(new_dir + "/test_str_read.txt"); 
        console.log(str_data);
        str_data = "hello test_write !!!!!"
        jsb.fileUtils.writeStringToFile(str_data, new_dir + "/test_str_write.txt");
        // (2)二进制文件的读写, Uint8Array --> js对象
        var bin_array = jsb.fileUtils.getDataFromFile(new_dir + "/test_bin_read.png");
        console.log(bin_array[0], bin_array[1]); // 使用这个就能访问二进制的每一个字节数据;
        jsb.fileUtils.writeDataToFile(bin_array, new_dir + "/test_bin_write.png");
        // end 
 
        // 删除文件和文件夹
        // jsb.fileUtils.removeFile(new_dir + "/test_bin_write.png"); 
        // jsb.fileUtils.removeDirectory(new_dir);
    }, 
});

三、浏览器环境下写文件

由于CocosCreator官方文档中没有提供跨平台的通用写文件接口。如果运行环境是浏览器,有一个替代方案可以实现把内容保存到文件,效果相当于下载了一个文件到本地。代码如下:

// 保存字符串内容到文件。
// 效果相当于从浏览器下载了一个文件到本地。
// textToWrite - 要保存的文件内容
// fileNameToSaveAs - 要保存的文件名
saveForBrowser(textToWrite, fileNameToSaveAs) {
    if (cc.sys.isBrowser) {
        console.log("浏览器");
        let textFileAsBlob = new Blob([textToWrite], {type:'application/json'});
        let downloadLink = document.createElement("a");
        downloadLink.download = fileNameToSaveAs;
        downloadLink.innerHTML = "Download File";
        if (window.webkitURL != null){
            // Chrome allows the link to be clicked
            // without actually adding it to the DOM.
            downloadLink.href = window.webkitURL.createObjectURL(textFileAsBlob);
        }else{
            // Firefox requires the link to be added to the DOM
            // before it can be clicked.
            downloadLink.href = window.URL.createObjectURL(textFileAsBlob);
            downloadLink.onclick = destroyClickedElement;
            downloadLink.style.display = "none";
            document.body.appendChild(downloadLink);
        }
        downloadLink.click();
    }
}

四、Cocos Creator 读写本地的json文件

关于Cocos Creator读写本地json文件,我们单独给大家写一篇文章专门做介绍!

最近发表
标签列表