// 程序入口
class GameMain{
constructor(){
var Loader = Laya.Loader;
var Browser = Laya.Browser;
var Handler = Laya.Handler;
var ProtoBuf = Browser.window.protobuf;
Laya.init(550, 400); //加载协议文件,相当于加载那个资源
ProtoBuf.load("../laya/proto/awesome.proto", onAssetsLoaded); //回调函数
function onAssetsLoaded(err, root){
if (err)
throw err;
// Obtain a message type
var AwesomeMessage = root.lookup("awesomepackage.AwesomeMessage");
// Create a new message 创建一条协议内容
var message = AwesomeMessage.create({
awesomeField: "AwesomeString"
});
// Verify the message if necessary (i.e. when possibly incomplete or invalid)
var errMsg = AwesomeMessage.verify(message);
if (errMsg)
throw Error(errMsg);
// Encode a message to an Uint8Array (browser) or Buffer (node)
var buffer = AwesomeMessage.encode(message).finish();
// ... do something with buffer
// Or, encode a plain object 也可以用这种方式创建这个数据然后编码
var buffer = AwesomeMessage.encode({
awesomeField: "AwesomeString"
}).finish();
// ... do something with buffer
// Decode an Uint8Array (browser) or Buffer (node) to a message 解码处理
var message = AwesomeMessage.decode(buffer);
// 在这里把解码的数据控制台打印,看看结果 console.log(message);
// ... do something with message
// If your application uses length-delimited buffers, there is also encodeDelimited and decodeDelimited.
}
}
}
new GameMain();
4 个回复
aidimiebear
赞同来自: q53511224 、……
参考这个连接并写了一个例子。现在把我的例子步骤贴出来给大家,如有错误请指正。
1、工程新建的内容我就不罗嗦了。先写一个awesome.proto文件,内容:
package awesomepackage;
message AwesomeMessage {
required string awesomeField = 1;
}
放在laya/proto下面,proto这个文件夹没有请自己创建。
2、在bin下的index.html里的这个位置,看粗体部分,protobuf.js在项目里已经存在了,不需要再引用外部的protobuf库:
<!--用户自定义顺序文件添加到这里-->
<!--jsfile--Custom-->
<script type="text/javascript" src="libs/protobuf.js"></script>
<!--jsfile--Custom-->
3、测试代码参考了上面那个连接,但稍微做了修改:
// 程序入口
class GameMain{
constructor(){
var Loader = Laya.Loader;
var Browser = Laya.Browser;
var Handler = Laya.Handler;
var ProtoBuf = Browser.window.protobuf;
Laya.init(550, 400);
//加载协议文件,相当于加载那个资源
ProtoBuf.load("../laya/proto/awesome.proto", onAssetsLoaded);
//回调函数
function onAssetsLoaded(err, root){
if (err)
throw err;
// Obtain a message type
var AwesomeMessage = root.lookup("awesomepackage.AwesomeMessage");
// Create a new message 创建一条协议内容
var message = AwesomeMessage.create({
awesomeField: "AwesomeString"
});
// Verify the message if necessary (i.e. when possibly incomplete or invalid)
var errMsg = AwesomeMessage.verify(message);
if (errMsg)
throw Error(errMsg);
// Encode a message to an Uint8Array (browser) or Buffer (node)
var buffer = AwesomeMessage.encode(message).finish();
// ... do something with buffer
// Or, encode a plain object 也可以用这种方式创建这个数据然后编码
var buffer = AwesomeMessage.encode({
awesomeField: "AwesomeString"
}).finish();
// ... do something with buffer
// Decode an Uint8Array (browser) or Buffer (node) to a message 解码处理
var message = AwesomeMessage.decode(buffer);
// 在这里把解码的数据控制台打印,看看结果
console.log(message);
// ... do something with message
// If your application uses length-delimited buffers, there is also encodeDelimited and decodeDelimited.
}
}
}
new GameMain();
4、最后在控制台输出:
AwesomeMessage {awesomeField: "AwesomeString"}
Victor
赞同来自: VergilLoL
cuixueying
赞同来自:
Laya_XS
赞同来自: