zoukankan      html  css  js  c++  java
  • GameMap地图初始化

    init_map(res_path)
    1.初始化mapbase的基本信息
    pos2d screen_area  = {1000, 600}; //普通屏幕大小
    m_spBase->init(screen_area.x / 3, screen_area.y / 3 , //屏幕划分成3*3格子
        header.map_size_item.base_size.x,
        header.map_size_item.base_size.y ); //map格子单位大小
    初始化了mapbase里面的map格子的大小为48*32,block大小1000/3,600/3这些单位都是像素
    
    2.初始化m_mapCellMgr基本信息
    屏幕大小:1000*600
    新手村:107*160
    std::vector<std::vector<int> > m_vec_collsion;//当前地图阻挡信息(0能通过,1不能,2透明,3摊位)
    std::vector<std::vector<int> > m_base_collsion;//基础地图阻挡信息(不包括人物、怪物阻挡,注意区分m_vec_collsion)
    m_mapCellMgr.init(m_vec_collsion);
    info->get_collsion(m_map_width, m_map_hight, m_vec_collsion);
    m_base_collsion = m_vec_collsion;
    m_mapCellMgr.init(m_vec_collsion);
    //初始化MapCellMgr对象m_mapCellMgr基本信息,这个是最近刚加进去的,估计是模仿天龙上面的
    // 单元格上对象类
    struct CellObject
    {
        CellObjType    m_type;    //对应 枚举CellObjType
        size_t    m_addTime;
        pos2d    m_localmPos; //单元格所在位置
        CellObject():m_type(CELL_INVALID), m_addTime(0){}
        virtual bool isBlocking()const = 0 ;    //是否为阻塞的
    };
    // map单元格信息
    struct MapCellInfo
    {
        int                    m_baseFlag;        //地图基础阻塞信息
        std::list<CellObject*>* m_pObjList;    //单元格上的对象列表
    };
    std::vector<std::vector<MapCellInfo> >    m_allMapCell;        // 单元格信息
    void MapCellMgr::init(const std::vector<std::vector<int> >& mapBlockInfo)
    {
        m_w = mapBlockInfo.size();
        m_h = mapBlockInfo[0].size();
    
        m_allMapCell.resize(m_w);
        for(int x = 0; x < m_w; ++x)
        {
            m_allMapCell[x].resize(m_h);
            for(int y = 0; y < m_h; ++y)
            {
                auto& cell = m_allMapCell[x][y];
                cell.m_baseFlag = mapBlockInfo[x][y];//只初始化了这个地图基础阻塞信息
                cell.m_pObjList = nullptr;
            }
        }
    }
    3.计算地图的block格子的大小
    // 计算出整张地图大概需要横纵大概需要多少的block格子
    int map_all_w = m_map_width * header.map_size_item.base_size.x;//计算x坐标的像素大小
    int map_all_h = m_map_hight * header.map_size_item.base_size.y;//计算y坐标的像素大小
    //由于bolck格子是按照屏幕的3*3的格子换分的,所以这样可以计算出block格子的数目,至于为什么要+4,不太明白
    int block_w_num = map_all_w / (screen_area.x / 3) + 4; //多出4格预防外围(满足7x7范围控制
    int block_h_num = map_all_h / (screen_area.y / 3) + 4;
    4.角色(玩家和NPC)管理容器的初始化
    class MapBlockInfo
    {
    private:
        std::map<ObjID, ObjecInfo*> objs;
    
    public:
        void add(ObjecInfo* obj)
        {
            objs[obj->objId] = obj;
        }
        void del(ObjID id)
        {
            objs.erase(id);
        }
        std::map<ObjID, ObjecInfo*>* getAllobj()
        {
            return &objs;
        }
    };
    std::vector<std::vector<MapBlockInfo> >                    m_rolesBlock;    // 所有角色(玩家和NPC)
    m_mapCellMgr.m_rolesBlock.resize(block_w_num);  //角色
    5.魔法管理器初始化
    std::vector<std::vector<std::map<pos2d, SpellObj*> > >    m_spellsBlock;    // 所有魔法(key:block pos)
    m_mapCellMgr.m_spellsBlock.resize(block_w_num); //魔法
    6.道具管理器容器初始化
    m_mapCellMgr.m_itemsBlock.resize(block_w_num);  //道具物品
    std::vector<std::vector<std::map<size_t, ItemObj*> > >    m_itemsBlock;    // 所有道具(key:uid)
    6.装饰物容器初始化
    struct role_node    //角色节点(NPC、怪物、装饰物)
    {
        pos2d point;        //坐标
        int id;                //id
        std::string name;    //名称
    
        void clear()
        {
            point.clear();
            id = 0;
            name.clear();
        }
    };
    //[bx][by]   map[key:uid, value:装饰物信息]
    std::vector<std::vector<std::map<unsigned long, mapinfo::role_node> > > m_ornamemtal_block; 
    m_ornamemtal_block.resize(block_w_num);
    7.起来类的map指针初始化,对于为什么要加入这个map指针,说是为了访问map里面的那些共有的变量也是。
    TeamOption.m_TeamMap = this;
    ShopOption.m_ShopMap = this;
    TradeOption.m_TradeMap = this;
    Relation.m_RelationMap = this;
  • 相关阅读:
    经典8锁问题--助你彻底搞懂锁的概念
    linux上安装mysql
    Jenkins安装详解
    第一篇:实时网络日志分析器和交互式查看器--GoAccess安装
    Centos7上安装python3.7
    Nginx报错收集
    免费yum源镜像地址
    nginx日志文件切割
    腾讯云绑定和配置弹性网卡和添加弹性网卡
    LNMP-WEB应用环境搭建
  • 原文地址:https://www.cnblogs.com/zzyoucan/p/3945887.html
Copyright © 2011-2022 走看看