一、准备
服务端给到的.sproto文件需要转换为 .spb文件。
二、加载方式,第二种方式在微信小游戏上无法解析,所以我用的第一种
①默认加载
//sprotojs的引入
// ./当前目录 ../上一级目录
let sproto = require("./../lib/sproto");
let path = "sproto/protocol";
let self = this;
cc.resources.load(path, cc.BufferAsset, (error, assets:cc.BufferAsset) => {
printf.Log(`cc.resources.load`);
//爆红不用管
let file = assets._buffer;
printf.Log(`load file = `, file);
let mybuffer = (file instanceof ArrayBuffer)? file: file.buffer;
let arrayBuffer = new DataView(mybuffer);
//console.log("arrayBuffer.buffer = ", arrayBuffer.buffer);
let data_8 = new Uint8Array(arrayBuffer.buffer, arrayBuffer.byteOffset, arrayBuffer.byteLength)
self.m_sproto = sproto.createNew(data_8);
});
②管线自定义加载
cc.assetManager.downloader.register('.spb', (path, options, onComplete) => {
cc.assetManager.downloader.downloadFile(path, {responseType: 'arraybuffer'}, onComplete);
});
cc.assetManager.parser.register('.spb', function (file, options, callback) {
//console.error("eeee");
printf.Log(`parser file = `, file);
//loadAny里面的回调
callback(null, file);
});
let path = "sproto/protocol";
let self = this;
//cc.assetManager.loadAny([`e3824b3a-e226-4bff-a78e-d6644a9f0837`], (error, assets) => { //uuid
cc.assetManager.loadAny({path:path, bundle: 'resources'}, (error, assets) => {
printf.Log(`cc.assetManager.loadAny`);
let file = assets._nativeAsset //模拟器会报错 Cannot read property '_$nativeAsset' of undefined
printf.Log(`loadAny file = `, file);
let mybuffer = (file instanceof ArrayBuffer)? file: file.buffer;
let arrayBuffer = new DataView(mybuffer);
//console.log("arrayBuffer.buffer = ", arrayBuffer.buffer);
let data_8 = new Uint8Array(arrayBuffer.buffer, arrayBuffer.byteOffset, arrayBuffer.byteLength)
self.m_sproto = sproto.createNew(data_8);
});
先写个加载,待续…