楼主最后是怎么解决的啊,小白一枚,求指教
我就不明白了,难道引擎组的老大都认为游戏不需要读自定义格式的文件,难道都是如他们所想的使用文本文件
一个简单的读文件的api都做得不理想,还谈何做引擎 ?!
看看unity的读文件的api,看看人家是怎么做的!!!
楼主应该说的是读取放在工程中的二进制文件吧,分享一下我的做法
主要分两步
-
获取资源的真实路径,有两种方法
-
使用 cc.url.raw 获取,推荐这种方法
// 获取真实路径 let binaryFile = 'resources/filename'; // 要求必须放在 resources 目录下 let extensionName = '.bin'; // 后缀名 let url = cc.url.raw(binaryFile) + extensionName;
-
在组件中定义 cc.Asset 类型资源,把二进制文件拖进去,但是引擎会报警告
const {ccclass, property} = cc._decorator; @ccclass export default class YourComponent extends cc.Component { @property(cc.Asset) binaryAsset: cc.Asset = null; onLoad () { let url = this.binaryAsset.toString(); } } /** * 引擎将会警告 * Please change the definition of property 'aaaaaa' in class 'YourComponent'. Starting from v1.10, * properties in CCClass can not be abbreviated if they are of type RawAsset. */
-
-
使用获取到的真实路径 url 拿到二进制数据,这里也有两种做法
-
使用 cc.loader.load 获取,这种方法在原生环境和 Web 环境都有效,推荐使用这种方法
cc.loader.load( { url: url, type: 'binary'}, (err, binaryData: Uint8Array) => { if (err) { console.error(err.message || err); } else { // todo } } );
-
使用 jsb.fileUtils.getDataFromFile 获取,但只能在原生环境使用
let binaryData: Uint8Array = jsb.fileUtils.getDataFromFile(url);
-
当然楼上说的,使用 HTTP 请求远程数据也是可以的
2赞
多说一句,这种方法也是看引擎摸索,尝试了一段时间才试出来的,但是如果由引擎提供一种 BinaryAsset 的资源类型,用来保存用户自定义的二进制数据,这当然是最好的
大佬,方法2在浏览器和原生环境中都是可以的,但是到了微信(小游戏)中就不起作用了,是Cocos creator 2.3.2的版本,你试过吗?