layaAir TS项目如何引用protoBuf库?

已邀请:

aidimiebear

赞同来自: q53511224 ……

我参考了http://layaair.ldc.layabox.com/demo/?2d&Network&ProtocolBuffer 
参考这个连接并写了一个例子。现在把我的例子步骤贴出来给大家,如有错误请指正。
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

好的谢谢,已解决。原本index里面有protoBuf库的引用,默认的是被注释的!

cuixueying

赞同来自:

protoBuf本就是js原生的类库,TS原生如何引用,在layaAir下还是如何引用,跟原生是一模一样的!

xiaosong

赞同来自:

有问题再提问!

要回复问题请先

商务合作
商务合作