轻松掌握cocoscreator中使用protobuf处理消息数据

以下是cocoscreator中protobuf比较基础的使用,但也是最有效的使用手段。根据自己的项目 进行修改。
需要的工具

安装node.js nodejs地址

下载protobufjs protobufjs地址

操作

1 .安装protobufjs到全局

npm install -g protobufjs

将模块安装到全局方便全局使用protobufjs提供的pbjs命令行工具。

pbjs可以将proto原文件转换成json、js

pbts,用来将转化后的js文件转为ts

2 .把下载好的protobuf中这个文件夹下的protobuf.js文件 把这个文件拖到Creator工程中并且导入为插件

3 .创建.proto消息文件

package ntesgame;

message Register {
    required string userId = 1;
    repeated string deviceId = 2;
    option string userToken = 3;
}

ntesgame 是包名,转换成js 或ts 后就是 命名空间

Register 是 消息结构

required 是 必须有的变量

4 .在保存proto文件的目录下打开命令行执行如下命令

将文件中所有的.proto文件转化为一个proto.js文件)

pbjs -t static-module -w commonjs -o proto.js *.proto

将proto.js文件 转为 proto.d.t文件
pbts -o proto.d.ts proto.js

5.protobuf设置为插件后 修改proto.js中protobuf的引用

6.然后把proto.js 或 proto.d.ts文件放入项目代码目录中 即可

7.测试

@ccclass
export default class NewClass extends cc.Component {


    // LIFE-CYCLE CALLBACKS:

    // onLoad () {}

    start () {
        let msg = ntesgame.ClientRegister.create({userId:"123",deviceId:"22",userToken:"ff"})
        let encode = ntesgame.ClientRegister.encode(msg).finish();
        console.log("编码:",JSON.stringify(encode))
        this.scheduleOnce(()=>{
            let decode = ntesgame.ClientRegister.decode(encode)
            console.log("解码:",JSON.stringify(decode))

        },3)
    }

    // update (dt) {}
}

测试结果:

福利: protobuf自动转换工具

长按 下面二维码 或者 搜索 公众号。亮亮同学TT 关注 并发送 protobuf 获取 自动转换工具

往期精彩内容:

全面讲解cocoscreator热更新

TS项目中使用全局变量/对象

虚拟摇杆功能实现

无限滚动背景

子弹追踪实现

技能cd效果实现

2赞

encode的数据应该再做偏移处理比较好

加我微信探讨一下:wink:

如果proto文件内容很少,可以转js,区别不大

如果proto协议内容太多,不建议建proto转成js文件来用,转完之后的js文件太大了,web版本下载会慢,微信QQ这类小游戏限制js代码大小,会非常麻烦。甚至所有代码会超过8M,没法玩了。
可以不转js文件,直接运行时加载proto文件即可。

可以的 :wink:

请教下,creator3.1.1转完proto文件能正常使用(d.ts改成全局变量调用了),然后导入long为插件想在代码使用,代码输入util.Long会import { util } from ‘…/…/thirdy/protobuf’;然后运行就会提示load http…/thirdy/protobuf failed;难道也要把long改成全局变量调用吗?知道怎么改吗?问题描述的有点不清楚 大家看看交流下。