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;                //idstd::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;

转载于:https://www.cnblogs.com/zzyoucan/p/3945887.html

GameMap地图初始化相关推荐

  1. openlayers地图初始化

    1.安装ol(官网ol已更新到openlayers7版本,我所用的是v6.14.1) yarn add ol //安装openlayers 2.初始化openlayer地图 先创建一个容器来存放map ...

  2. ORB-SLAM2系列第三章—— 地图初始化

    文章目录 前言 一.为什么需要地图初始化? 二.多视图几何基础 1.对极约束示意图 2.H矩阵求解原理 3.哪个奇异向量是最优解? 3.求解基础矩阵F 4.SVD 5.单目投影恢复3D点 三. 卡方检 ...

  3. 腾讯地图初始化以及解析和逆解析

    腾讯地图: 开发文档: JavaScript API | 腾讯位置服务 index.html中引入 老版地图进行初始化,并根据定位打点: <div id="container" ...

  4. (01)ORB-SLAM2源码无死角解析-(24) 单目SFM地图初始化→CreateInitialMapMonocular()-细节分析:尺度不确定性

    讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解的(01)ORB-SLAM2源码无死角解析链接如下(本文内容来自计算机视觉life ORB-SLAM2 课程课件): (0 ...

  5. #用python的pygame写一个大富翁游戏(单机版)# 二:地图初始化

    用python的pygame写一个大富翁游戏(单机版) 二 :地图初始化 往期: #用python的pygame写一个大富翁游戏(单机版)# 一 : 初步架构 上次的博客,我们说到了准备好所有程序所需 ...

  6. ORB-SLAM(三)地图初始化

    单目SLAM地图初始化的目标是构建初始的三维点云.由于不能仅仅从单帧得到深度信息,因此需要从图像序列中选取两帧以上的图像,估计摄像机姿态并重建出初始的三维点云. ORB-SLAM中提到,地图初始化常见 ...

  7. GameMap其他初始化

    //其他初始化 init_prop();//初始化道具 init_ornamemtal();//初始化装饰物 init_monster_type_info();//初始化怪物基本信息 这个比较重要在加 ...

  8. 高德地图-初始化地图

    1.问题背景 利用高德地图的接口,创建一个以武汉为中心点的地图,放大级别是18 2.实现源码 <!DOCTYPE html> <html><head><tit ...

  9. nuxt百度地图引入基础使用,百度地图初始化,行政区划划分

    如何在nuxt项目中使用百度地图 进入百度地图API 选择javascriptAPI,按照流程注册账号获取ak,复制ak 按照页面提示的,需要引入script标签 这里我们打开nuxt项目中的nuxt ...

  10. Android百度地图SDK 导航初始化和地图初始化引起的冲突

    如题,同样是百度地图SDK开发过程中遇到的一个问题,交代下背景: 开发了一款内嵌百度地图的应用,因此里面差不多将目前百度地图SDK开放的主要功能都用到了,定位,地图显示,覆盖物标示,POI搜索,行程路 ...

最新文章

  1. C++11之final关键字
  2. 专访浪潮王虹莉 探互联网服务器市场的未来
  3. 慎重使用volatile关键字
  4. HBase中的时间维度
  5. 统计插件_CG Teamwork统计提交量插件制作思路
  6. apereo cas mysql_Apereo CAS 5.0.X 默认提供的数据库认证的四种方式
  7. Spring 3.0参考之SpEL
  8. CCF 2017-3-2 学生排队
  9. 【海啸预警】乔碧罗都在谈“区块链”,意味着新浪潮真的要来了?!
  10. 如何在福昕阅读器上将 pdf 文档背景色改为绿豆沙
  11. KISSsoft03-2018F SP6,计算和重新分析机器零件
  12. dda算法_C和C ++中的DDA线图绘制算法
  13. 企业微信员工离职后,还能看聊天记录吗?
  14. 91pay.php,电商网站使用支付宝转账付款功能代替支付宝支付接口
  15. 联想ghost重装系统_史上最全的重装ghost系统错误解决方法大全
  16. 元宇宙3D设计系统【构思与展望】
  17. 服务器上的环境迁移到另一台服务器上(采用克隆方式)
  18. 计算机之父冯·诺依曼
  19. 使用Scratch制作项目《弹珠游戏》
  20. HTML5+CSS大作业——彭于晏明星(15页) _网页设计期末作业

热门文章

  1. Springboot 默认加载文件(可直接访问、不可直接访问)是出现的问题
  2. Visual Studio Code 基本操作 - Windows 版
  3. JAVA 基础 / 第八课:面向对象 / JAVA类的方法与实例方法
  4. Jzoj3882 近邻
  5. 14. Longest Common Prefix【leetcode】
  6. Ext中Date format含义
  7. 物流管理系统【前台+后台】(Spring+SpringMVC+MyBatis+vue+shiro)(二)
  8. java使用Redis(六个类型)
  9. 7832:最接近的分数
  10. Oracle 恢复删除的表