Egret社区
5银子
本帖最后由 1219 于 2017-3-21 09:48 编辑

declare module dcodeIO{
    class ProtoBuf{
        static loadProto(protoContents:string):any;
    }
}

这样子只能单个加载,而且如果import其他的proto这样子处理会有问题,应该怎么处理,js源码不支持多个同时加载吗?
坐等,我也是在找怎么加载多个相互依赖proto文件,现在的做法是把所有东西写到一个proto文件里面,没有其他方法吗?


分享到 :
0 人收藏

13 个回复

倒序浏览
kymean  登堂入室 | 2017-3-20 11:51:46
                {
                        "name": "GameProto_proto",
                        "type": "text",
                        "url": "assets/protobuf/GameProto.proto"
                },
                {
                        "name": "MatchProto_proto",
                        "type": "text",
                        "url": "assets/protobuf/MatchProto.proto"
                },


可以这样用RES当一个Txt文件加载
1219  登堂入室 | 2017-3-20 11:57:29
kymean 发表于 2017-3-20 11:51
{
                        "name": "GameProto_proto",
                        "type": ...

恩恩,我的意思是两个proto有依赖关系的时候,loadProto这个只能加载其中的一个,或者我想多个同时加载,用loadProto就实现不了吗?
kymean  登堂入室 | 2017-3-20 12:00:21
本帖最后由 kymean 于 2017-3-20 12:01 编辑
1219 发表于 2017-3-20 11:57
恩恩,我的意思是两个proto有依赖关系的时候,loadProto这个只能加载其中的一个,或者我想多个同时加载, ...

我没用过你那种方式加载。

只用egret的传统方式用RES 加载的

RES.loadConfig("resource/default.res.json", "resource/");

这个结束之后用的两个加载

RES.loadGroup("preload");

RES.loadGroup("game");


这样会异步吗?我没试过。。。
1219  登堂入室 | 2017-3-20 12:03:06
kymean 发表于 2017-3-20 12:00
我没用过你那种方式加载。

只用egret的传统方式用RES 加载的

我说的和你说的不是同一个问题,你没有理解我的意思,我不是说怎么加载到引擎,我是说加载进protojs,protobuffer帮我们解析字段,我们需要把proto文件给他
kymean  登堂入室 | 2017-3-20 12:07:34
本帖最后由 kymean 于 2017-3-20 12:10 编辑
1219 发表于 2017-3-20 12:03
我说的和你说的不是同一个问题,你没有理解我的意思,我不是说怎么加载到引擎,我是说加载进protojs,pro ...

private static protoBuilder: any=null;
        public static GetBuilder()
        {
            if(!Proto.protoBuilder)
            {
               
                var proto: string = RES.getRes("GameProto_proto");

                var builder: any = Proto.protoBuilder = dcodeIO.ProtoBuf.loadProto(proto);

            }

            return  Proto.protoBuilder;

        }
        public static GetProtoClass(type:number):any
        {
           return  this.GetBuilder().build(this.GetProtoString(type));
        }


        public static GetProtoString(type:number)
        {
            var tRet="";
            switch (type) {
                case Proto.OP_AUTH_REQ: //1
                    tRet="AuthReq";
                    break;



不知道你是不是需要这个。。。你可以建立两个builder  

var builder: any = Proto.protoBuilder = dcodeIO.ProtoBuf.loadProto(proto);

var builder2: any = Proto.protoBuilder = dcodeIO.ProtoBuf.loadProto(proto);



1219  登堂入室 | 2017-3-20 12:10:37
kymean 发表于 2017-3-20 12:07
private static protoBuilder: any=null;
        public static GetBuilder()
        {

dcodeIO.ProtoBuf.loadProto(proto)这里只能单个吗?你们的proto都没有依赖关系吗?
kymean  登堂入室 | 2017-3-20 12:12:26
1219 发表于 2017-3-20 12:10
dcodeIO.ProtoBuf.loadProto(proto)这里只能单个吗?你们的proto都没有依赖关系吗?

什么依赖关系?

他就是解析了之后把中间文件放到一个 变量里面 你设置两个变量

builder1 builder2  解析就行了呀

然后做个方法  getbuilder1  getbuilder2之类的
kymean  登堂入室 | 2017-3-20 12:14:57
我是建了两个类

class MatchProto
{
    private static protoBuilder: any=null;
        public static GetBuilder()
        {
            if(!MatchProto.protoBuilder)
            {
               
                var proto: string = RES.getRes("MatchProto_proto");

                var builder: any = MatchProto.protoBuilder = dcodeIO.ProtoBuf.loadProto(proto);

            }

            return  MatchProto.protoBuilder;

        }
        public static GetProtoClass(type:number):any
        {
           return  this.GetBuilder().build(this.GetProtoString(type));
        }
1219  登堂入室 | 2017-3-20 12:36:23
kymean 发表于 2017-3-20 12:14
我是建了两个类

class MatchProto

虽然没有得到我想要的,还是感谢你
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|京网文[2014]0791-191号|京ICP证150115号|Egret社区 ( 京ICP备14025619号 )

Powered by Discuz! X3.4 © 2001-2019 Comsenz Inc.

返回顶部