解决方案:在Cocos Creator1.8中使用官方的google protobuf

我服务器也是c++写的前端cocos creator使用protobuf.js没有问题,后来为了方便团队开发,就是用pbkiller了一直没有问题的

我也又研究了一下,protobufjs和google protobuf的二进制部分确实是兼容的。虽然处理过程中有一些不一样的地方。
看来我做的大部分工作重复造轮子了。不过pbkiller里面的byte buffer处理工具感觉没有google的好用。

1赞

不用改地,用webpack打包一下就搞定了

我按照楼主的方法在creator中没问题,但是导入小游戏开发工具就出现如下错误:
(unknown) ReferenceError: proto is not defined
at Object.i.trhd_base_pb.google-protobuf (project.eaabd.js:5015)
at n (project.eaabd.js:10)
at project.eaabd.js:11
at Object.i.trhd_connd_pb…/trhd_base_pb.js (project.eaabd.js:5147)
at n (project.eaabd.js:10)
at project.eaabd.js:11
at Object.i.trhd_auth_pb…/trhd_connd_pb.js (project.eaabd.js:4731)
at n (project.eaabd.js:10)
at e (project.eaabd.js:15)
at project.eaabd.js:17

请教怎么解决?

我也遇到这个问题了,其实不是什么bug…
也很好解决,
倒是creator居然不报错很惊艳。。。

问题就是proto文件的namespace路径小程序工具里不认。

比如一个Award消息,在proto文件里面的namespace是
‘proto.com.myMessage’,即’proto.com.myMessage.Award’

那么在
goog.exportSymbol(‘proto.com.myMessage.Award’, null, global);
这行的前面人为创造这些个路径即可:
var proto = {};
proto.com = {};
proto.com.myMessage= {};

谢谢,果然解决。没用过js,做小游戏好多坑

用protobufjs好像是动态编译proto文件的,不过按楼主的方法,每个编译后的js文件也要改,觉得也挺坑。
不过看了别人用protobufjs,好像也要修改一下源码。

我错了,用protobufjs也可以预编译js,也完全不用改代码。。

protobufjs在小游戏里需要怎么改造

怎么预编译js呢

例如:
pbjs -t proto3 file1.proto file2.proto > bundle.json

详细看官网的command line:
https://github.com/dcodeIO/ProtoBuf.js#pbjs-for-javascript

1赞

@aieylisyh 按照教程操作文件已经编译成功 但是怎么用哪个proto编译出js文件 就不理解了 方便解答下吗

其实还好吧,修改xxx.proto文件,生成xxx_pb.js,browserify打包下,import就能用了…

proto里面使用any定义数据,把any.proto编译出来,放入工程里面,提示protobuf未定义,怎么搞。是不能使用any么

不能使用any的

哦好吧,谢谢啦

你好,能请教下为什么不能用any么?我把any类型都引入了,但是就是最后无法encode

这里我整理了一份 前端后台以及游戏中使用google-protobuf详解

学习下,谢谢分享

websocket基本连接不上服务器 【弱网环境,欢乐麻将可以】
https://forum.cocos.com/t/websocket/74163/3