其实论坛里也有不少大佬已经说了protobuf在creator里面的用法,但是实际上遇到的事远没有大佬们说的那么简单。
我creator用了protobuf感觉傻瓜式。。。,跟后台配合好,还挺简单的
数组格式怎么定义的
大佬们写的教程基本都是 基于protobuf5 也是他们说的直接在项目下面 npm install protobufjs 但是npm下来的却是protobuf最新的版本,所以你们想学习大佬的教程一定要npm install protobufjs@5 这样才行,不然你就只能看着大佬的教程干瞪眼了。
不过不得不说,protobuf用起来还真方便 !!!!!!
var Protobufjs = require(‘protobuf’);
var protoDefine = `
package ccc;
message UserInfo
{
required int32 id = 1; //必写
optional string name = 2; //选写
optional int32 age = 3;
}`;
var builder = Protobufjs.parse(protoDefine);
var msg_class = builder.root.lookup("UserInfo");
var message = msg_class.create({id:1,name:"test"});
var body = msg_class.encode(message).finish();
console.log(body);
body = msg_class.decode(body);
console.log(body) ;
我也是后来才找到这样用的,不过我还是用的是protobuf5
proto数组怎么定义的
var json ={
id: 11,
name: “22”,
num: [1,2,3,4],
list: [
{id:1,name:“a”},
{id:2,name:“b”},
]
}
类似这样的数据怎么用proto定义
message PGame_S2C{
required int32 errorCode = 1;//错误码,参考对应code
optional PalyerInfo preInfo=2;//玩家和物品信息
}
PalyerInfo 是另外一个结构体
你可以先定义一个结构体,然后再赋值
@hc624009434 @matt @ly13714214979 @yangshuhong @MShawn
新手开搞cocos小游戏,项目中要集成protobuf,目前问题各种报错,有几个问题大佬们能否回答下:
开发环境cocos creator 1.9;
- 到底用google官方的js库还是用decodeIO的protobufjs
- 目前用decodeIO 6.8.6版本,只把protobuf.js这一个文件集成到工程中,然后使用loadSync或者load方法都是找不到.proto文件,看提示说是该方法只支持node环境,怎么解决?
- 不管用哪种能否给个可运行demo,跪求,感激涕零
邮箱: george_luofz@163.com
版本6.8的跟着协议解析就行,官例看下就可以了
嗨 我用load方法会报下边这个错误:
Failed to load resource: the server responded with a status of 404 (Not Found)
它从网络中去拿proto文件了,这是怎么回事
看你远程的名字对不对
感谢回答 这个问题现在解决一半了
proto 文件存放在assets/resources/目录下
代码如下:
var protobuf = require('protobufjs');
var resourceUrl = cc.url.raw("resources/login.proto");
protobuf.load(resourceUrl,function(error,root){ // 此处无论传cc.url.raw包装过得路径还是只传'resources/login.proto'结果都一样
if(error){
console.log('load error: '+error);
throw(error);
}
//...
}
- 在浏览器上跑是正常的 能解析到该目录下的proto文件
- 在cocos模拟器上提示:creator模拟器Simulator: Response failed, error buffer: 不支持的 URL这样的错误,似乎又从网络上找proto文件了
能否帮忙指导下,谢谢
这个就不一样了好像,那个是web用可以,放到模拟器上好想就不一样了,模拟器我也不知道要怎么弄,不好意思
感谢回答~
因为我们最终要把游戏作为一个模块集成到原生App中,不知道最终在原生端是否有问题?
期待大神回复
同样遇到这个问题,web应用ok,原生不行
模拟器中,资源路径“E:/xxxx/xxx/xx/xx/xxxx.proto”,控制台输出
Response failed, error buffer: Protocol “E” not supported or disabled in libcurl
这个load方法似乎只能加载http资源,本地的加载不了;用loadSync这个方法又只支持node环境,纠结