关于egret5.x外部库的配置以及导入最新protobuf导入及使用的一些说明

egret5.x修改了第三方库的导入方式,新建项目的index.html再也看不到任何库的预留位置。取而代之,从manifest.json去读取并加载库和游戏文件。因此,这里的配置已经不能像之前项目非标准的配置方式了,所有的库都要在egret项目下egretProperties.json文件中去配置。


protobuf的API发生了翻天覆地的改变,因此需要重新熟悉,不过好在有官方文档熟悉起来也不难。现在也不需要再去为再egret中使用自己去写.d.ts声明了,在protobuf库下index.d.ts已经写好了。我们只需要拷贝到项目中使用即可。
在egret中,我在libs下创建一个protobuf文件夹,然后将index.d.ts拷贝到里面,并改名为protobuf.d.ts,再将protobuf库下dist目录中将protobuf.js和protobuf.min.js文件拷贝到这里。然后在项目下egretProperties.json配置protobuf库,如下

{
  "native": {
    "path_ignore": []
  },
  "publish": {
    "web": 0,
    "native": 1,
    "path": "bin-release"
  },
  "egret_version": "5.0.7",
  "template": {},
  "modules": [
    {
      "name": "egret"
    },
    {
      "name": "game"
    },
    {
      "name": "tween"
    },
    {
      "name": "res"
    },
    {
      "name": "promise",
      "path": "./promise"
    },
    {
      "name": "protobuf",
      "path": "./libs/protobuf"
    }
  ]

然后在resource/assets下创建一个proto文件夹,专门存放proto,在这里我创建了一个login.proto

syntax = "proto2";
package login;
message Login {
    required string account = 1;
    required string password = 2;
}

message createRole {
    required string name = 1;
    required int sex = 2;
}

然后在default.res.json中配置,这里我就配成预加载了,当然每个项目的处理不一样,这就仁者见仁智者见智了

{
    "groups":[
    {
        "keys":"bg_jpg,egret_icon_png,description_json,login_proto",
        "name":"preload"
    }],
    "resources":[
    {
        "name":"bg_jpg",
        "type":"image",
        "url":"assets/bg.jpg"
    },
    {
        "name":"egret_icon_png",
        "type":"image",
        "url":"assets/egret_icon.png"
    },
    {
        "name":"login_proto",
        "type":"text",
        "url":"assets/proto/login.proto"
    },
    {
        "name":"description_json",
        "type":"json",
        "url":"config/description.json"
    }]
}

然后开始在Main.ts中编写代码,在createGameScen中编写了如下测试代码

let ProtoBufRoot = new protobuf.Root();
let loginStr:string = RES.getRes("login_proto");
protobuf.parse(loginStr, ProtoBufRoot);


const Login = ProtoBufRoot.lookupType("login.Login");
        
let message = Login.create({ account: "qiu" , password: "204qiu"});
console.log(`message = ${JSON.stringify(message)}`);
    
let buffer = Login.encode(message).finish();
console.log(`buffer = ${Array.prototype.toString.call(buffer)}`);    
    
let decoded = Login.decode(buffer);
 console.log(`decoded = ${JSON.stringify(decoded)}`);

一般我都会将ProtoBufRoot作为全局存放,这样引用方便,所以首字母大写了。当然我自己也是将其作为全局存放的,这里为了不将代码分散看起来凌乱,放在一起方便查看,只是抛砖引玉。
编译运行即可看到编码和解码的结果

message = {"account":"qiu","password":"204qiu"}
buffer = 10,3,113,105,117,18,6,50,48,52,113,105,117
decoded = {"account":"qiu","password":"204qiu"}

转载于:https://www.cnblogs.com/wxbqiu/p/7574899.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值