您的位置:首页 > 其它

Hay Day系统设计沉思录——数据存储

2013-11-10 20:16 323 查看
       对Hay Day的农场数据的存储进行一些推断。

      服务器会对所有逻辑相关的农场中对象进行存储:

         (1) 对象在当前玩家农场中的唯一标识 ID

    (2) 对象的类型

         (3) 对象的属性, 公共属性包括朝向(左右镜像),位置(x, y) ,私有属性根据类型的不同而不同

         这样,服务器在玩家登录时下发的协议结构大致如下:

        message FarmInfo

       {

                repeated Land lands = 1;                       // 田地信息

                repeated AnimalFold animal_folds = 2;     //  动物圈养信息(如牛,鸡,猪,羊等)

                repeated GoodsMachine goods_machines = 3; // 货物机器信息(面包机,烧烤机等)

                repeated WareHouse       ware_houses = 4;       // 仓库信息(包括货仓和粮仓)

                repeated
NaturalObject     natural_objects = 5;   // 自然物件(如大树,小树,石头等)

               // 其他信息......

       };

         

        // 田地信息可以这样设计:

         message Land

        {

                required uint32     id =  1;                        // 对象的唯一标识

                requried Position pos = 2;                      // x,y 坐标

                required bool       is_right_dir  = 3         // 是否朝右

                optional short     state = 4;                    // 状态(包括空闲,作物成长,作物成熟)

                optional short     crop_type = 5;           // 作物种类(包括麦子,甘蔗,玉米等),在非空闲状态下有意义

                optional uint32     growed_time = 6;     // 已经成长了的时间,单位为秒,在作物成长状态下有意义             

        }

           message AnimalFold 

        {

                required  uint32     id =  1;                        // 对象的唯一标识

                requried  Position  pos = 2;                     // x,y 坐标

                required  bool        is_right_dir  = 3         // 是否朝右 
                repeated Animal   animals = 4;               // 动物信息             

        }

          message Animal

        {

               required  uint32     id =  1;                        // 对象的唯一标识 

               required  short      type = 2;                     // 种类

               requried  short      state = 3;                    // 饥饿,生产,待收集

               optional   uint32    produced_time = 4;  // 已经生产了的时间,单位为秒,在生产状态下有意义   
        

        }

       // 其他信息........

在这里只简单列出来田地信息的结构,其他的结构信息就不用赘述了,原则就是缺什么就加字段,并且注意同类信息的结构复用。

       客户端的每一次逻辑操作,都会形成操作序列,经固定间隔发送给服务器进行验证,验证通过后,服务器会修改存储的数据。

       可以大概估算一下用户登录的时候,服务器的发包大小:

       如果用户有60块land,10个animalFold,30个GoodsMachine,200个NatrualObject,假设land,animalFold,GoodsMachine的字节平均大小为40,这里一共是100*40 = 4000字节;而NatrualObject的字节上限为10字节(信息比较少),差不多是200*10 = 2000字节,再加上其他杂七杂八的,应该最后不超过10000字节,也就是10KB,这样看来还不存在初始包体大小瓶颈。

       客户端如果用cocosBuidler制作初始场景的时候,需要修改插件,使之可以导出初始逻辑地图信息给服务器(可以是xml格式的文件,去除了表现类的属性,比如纹理和动画信息等)。

       欲知后事如何,请看下回分解

        

          
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: