【Creator】CocosCreator中protobuf与js对象互转

CocosCreator中protobuf与js对象互转

在项目中使用protobuf的时候,各个变量赋值写起来很累。最好的方式是传一个js的结构体,自动转换为pb的对应方法

1. 添加protobuf支持

  • npm install google-protobuf

2. 测试的proto文件,内容如下:

`syntax = “proto3”;

package Login;
option go_package = “proto/Login”;

//消息互动
message Message {
string Type = 1; //方法名
bytes Datas = 2; //消息内容
}

//登陆游戏
message LoginGet{
sint32 UserID = 1;
string Key = 2;
sint32 GameID = 3;
repeated sint32 Thirds = 4;
map<int32, int32> Maps = 5;
}
message LoginAck{
sint32 CRet = 1;
sint32 UserID = 2;
}`

  • 客户端与服务器的数据交互可以使用Message,传报名+方法名。比如:Login.LoginGet
  • LoginGet中定义了基本的类型,结构体也支持

3. 发送代码如下:

`let obj = {

​ UserID: 111,

​ Key: “userkey”,

​ GameID: 1001,

​ Thirds: [1,2,3,4,5,6,7,8],

​ Maps: {1:1, 2:2, 3:3},

​ }

​ console.log(“发送数据:”, obj)

​ let senddata = this.encodeData(“Login.LoginGet”, obj)`

  1. 解析代码如下:

    `

    decodeData : function (_key, _data){

    ​ let array = _key.split(“.”)

    ​ if (array.length<2){

    ​ cc.log(“error:”, _key, _data)

    ​ return

    ​ }

    ​ if (window[array[0]] && window[array[0]][array[1]]){

    ​ let pbc = window[array[0]][array[1]].deserializeBinary(_data)

    ​ let obj = pbc.toObject()

    ​ this.dispatch(array[0], array[1], obj)

    ​ } else {

    ​ cc.log(“error none obj:”, _key, _data)

    ​ }

    },

    //解析数据

    ​ let result = this.decodeData(“Login.LoginGet”, senddata)

    ​ console.log(“收到数据:”, result)

    `

  2. 效果截图:

在这里插入图片描述

6,点我下载完整示例

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值