1. init_map(res_path)
  2. .初始化mapbase的基本信息
  3. pos2d screen_area = {, }; //普通屏幕大小
  4. m_spBase->init(screen_area.x / , screen_area.y / , //屏幕划分成3*3格子
  5. header.map_size_item.base_size.x,
  6. header.map_size_item.base_size.y ); //map格子单位大小
  7. 初始化了mapbase里面的map格子的大小为48*,block大小1000/,/3这些单位都是像素
  8.  
  9. .初始化m_mapCellMgr基本信息
  10. 屏幕大小:*
  11. 新手村:*
  12. std::vector<std::vector<int> > m_vec_collsion;//当前地图阻挡信息(0能通过,1不能,2透明,3摊位)
  13. std::vector<std::vector<int> > m_base_collsion;//基础地图阻挡信息(不包括人物、怪物阻挡,注意区分m_vec_collsion)
  14. m_mapCellMgr.init(m_vec_collsion);
  15. info->get_collsion(m_map_width, m_map_hight, m_vec_collsion);
  16. m_base_collsion = m_vec_collsion;
  17. m_mapCellMgr.init(m_vec_collsion);
  18. //初始化MapCellMgr对象m_mapCellMgr基本信息,这个是最近刚加进去的,估计是模仿天龙上面的
  19. // 单元格上对象类
  20. struct CellObject
  21. {
  22. CellObjType m_type; //对应 枚举CellObjType
  23. size_t m_addTime;
  24. pos2d m_localmPos; //单元格所在位置
  25. CellObject():m_type(CELL_INVALID), m_addTime(){}
  26. virtual bool isBlocking()const = ; //是否为阻塞的
  27. };
  28. // map单元格信息
  29. struct MapCellInfo
  30. {
  31. int m_baseFlag; //地图基础阻塞信息
  32. std::list<CellObject*>* m_pObjList; //单元格上的对象列表
  33. };
  34. std::vector<std::vector<MapCellInfo> > m_allMapCell; // 单元格信息
  35. void MapCellMgr::init(const std::vector<std::vector<int> >& mapBlockInfo)
  36. {
  37. m_w = mapBlockInfo.size();
  38. m_h = mapBlockInfo[].size();
  39.  
  40. m_allMapCell.resize(m_w);
  41. for(int x = ; x < m_w; ++x)
  42. {
  43. m_allMapCell[x].resize(m_h);
  44. for(int y = ; y < m_h; ++y)
  45. {
  46. auto& cell = m_allMapCell[x][y];
  47. cell.m_baseFlag = mapBlockInfo[x][y];//只初始化了这个地图基础阻塞信息
  48. cell.m_pObjList = nullptr;
  49. }
  50. }
  51. }
  52. .计算地图的block格子的大小
  53. // 计算出整张地图大概需要横纵大概需要多少的block格子
  54. int map_all_w = m_map_width * header.map_size_item.base_size.x;//计算x坐标的像素大小
  55. int map_all_h = m_map_hight * header.map_size_item.base_size.y;//计算y坐标的像素大小
  56. //由于bolck格子是按照屏幕的3*3的格子换分的,所以这样可以计算出block格子的数目,至于为什么要+4,不太明白
  57. int block_w_num = map_all_w / (screen_area.x / ) + ; //多出4格预防外围(满足7x7范围控制
  58. int block_h_num = map_all_h / (screen_area.y / ) + ;
  59. .角色(玩家和NPC)管理容器的初始化
  60. class MapBlockInfo
  61. {
  62. private:
  63. std::map<ObjID, ObjecInfo*> objs;
  64.  
  65. public:
  66. void add(ObjecInfo* obj)
  67. {
  68. objs[obj->objId] = obj;
  69. }
  70. void del(ObjID id)
  71. {
  72. objs.erase(id);
  73. }
  74. std::map<ObjID, ObjecInfo*>* getAllobj()
  75. {
  76. return &objs;
  77. }
  78. };
  79. std::vector<std::vector<MapBlockInfo> > m_rolesBlock; // 所有角色(玩家和NPC)
  80. m_mapCellMgr.m_rolesBlock.resize(block_w_num); //角色
  81. .魔法管理器初始化
  82. std::vector<std::vector<std::map<pos2d, SpellObj*> > > m_spellsBlock; // 所有魔法(key:block pos)
  83. m_mapCellMgr.m_spellsBlock.resize(block_w_num); //魔法
  84. .道具管理器容器初始化
  85. m_mapCellMgr.m_itemsBlock.resize(block_w_num); //道具物品
  86. std::vector<std::vector<std::map<size_t, ItemObj*> > > m_itemsBlock; // 所有道具(key:uid)
  87. .装饰物容器初始化
  88. struct role_node //角色节点(NPC、怪物、装饰物)
  89. {
  90. pos2d point; //坐标
  91. int id; //id
  92. std::string name; //名称
  93.  
  94. void clear()
  95. {
  96. point.clear();
  97. id = ;
  98. name.clear();
  99. }
  100. };
  101. //[bx][by] map[key:uid, value:装饰物信息]
  102. std::vector<std::vector<std::map<unsigned long, mapinfo::role_node> > > m_ornamemtal_block;
  103. m_ornamemtal_block.resize(block_w_num);
  104. .起来类的map指针初始化,对于为什么要加入这个map指针,说是为了访问map里面的那些共有的变量也是。
  105. TeamOption.m_TeamMap = this;
  106. ShopOption.m_ShopMap = this;
  107. TradeOption.m_TradeMap = this;
  108. Relation.m_RelationMap = this;

GameMap地图初始化的更多相关文章

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

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

  2. acgis地图初始化并根据经纬度进行标注

    根据项目要求,需要对指定的位置进行标注. 1.初始化地图服务 2.根据地图服务接口信息进行标注 3.根据经纬度信息进行标注 展示接口截图: 以下代码并不能直接粘贴跑起来,因为代码所涉及的文件地址都是内 ...

  3. GameMap其他初始化

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

  4. 3.0+百度地图在地图初始化的时候就弹框展示一个信息框,而不是用户点击poi时才弹出

    有些时候我们会有这样的业务:当用户根据地址跳转到地图后,希望能够立即弹框展示该poi的地址信息. 实现方法: 百度地图3.0+的类BaiduMap中提供了一个方法showInfoWindow(Info ...

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

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

  6. 百度地图的初始化应当在vue的mounted()函数里执行

    今天使用百度地图出现了一个问题,百度地图初始化后宽.高都是0,但是地图容器宽高都设置好的, 一开始怎么都排除不出问题,后来无语了,把布局直接复制进入百度地图的示例里运行发现没有问题, 所以想到不是百度 ...

  7. arcgis api for js入门开发系列三地图工具栏(含源代码)

    上一篇实现了demo的地图加载展示,在上篇实现的基础上,新增了地图工具栏以及通用地图控件功能,比如地图框选缩放.地图漫游.清空.量算工具.地图导航控件.地图比例尺控件.地图鹰眼图等等,总共分为5个部分 ...

  8. 百度地图JavaScript API [一]

    参考网址: http://developer.baidu.com/map/index.php?title=jspopular/guide/widget 1.申请密钥(ak) http://api.ma ...

  9. 吐槽贴:百度地图 api 封装 的实用功能 [源码下载]

    ZMap 类 功能介绍 ZMap 是学习百度地图 api 接口,开发基本功能后整的一个脚本类,本类方法功能大多使用 prototype 原型 实现: 包含的功能有:轨迹回放,圈画区域可编辑,判断几个坐 ...

随机推荐

  1. C++读入一个参数

    题目内容:已知正方形的边长,试编程求出其面积. 输入描述:输入不超过50个正整数的数据n(1<=n<=10000),每个正整数间以空格隔开. 输出描述:每次读入一个正整数,便输出其正方形的 ...

  2. 使用WIF实现单点登录Part III —— 正式实战

    我们接下来的demo将包括以下的工程: SiteA —— 基于.net framework 4.5的MVC 4程序,使用WIF 4.5的SDK,第一个RP SiteB —— 基于.net framew ...

  3. MVC的Filters(拦截过滤)的Error页面,支持Ajax报错

    报错拦截过滤到error页面 [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited = true, A ...

  4. 12.python中的列表

    先看列表是如何创建的: a = ['scolia', 123] b = list('scolia',123) 同样有两种创建方式,但一般用第一种. 列表和元祖最大的不同就是列表是可以修改的. 老规矩, ...

  5. python 中 input 和 raw_input 的区别

    input会假设输入的信息是合法的python表达式,例如,输入一个人名,Diesel,input会认为这是一个变量,必须加上引号,比如“Diesel”: 而raw_input会把所有的输入当作原始数 ...

  6. EMVTag系列6《IAC 发卡行行为代码》

    R(需求):数据应存在,在读应用数据过程中,终端不检查:将变成必备 L: 5 IAC 的值,最好不要自定义,最好和所选的模板完全匹配.如果修改持卡人认证位,PIN Bypass 相关的位.如果有业务需 ...

  7. 菜鸟学习Struts——Scope属性

    一.概念. 在Action映射配置中,Scope属性可以取值为:request或session.Scope属性表示:Struts框架在将     ActionForm对象(与目标Action匹配的Ac ...

  8. Media Player(APP)

    今天共享一下,以前做的影音播放器.比较简单.适合新手. 我上传了附件可以参考一下. PDF:http://files.cnblogs.com/files/hongguang-kim/MediaPlay ...

  9. BASE64与单向加密算法MD5&SHA&MAC

    言归正传,这里我们主要描述Java已经实现的一些加密解密算法,最后介绍数字证书.     如基本的单向加密算法: BASE64 严格地说,属于编码格式,而非加密算法 MD5(Message Diges ...

  10. Go support for Android

    Go support for Android David Crawshaw June 2014 Abstract We propose to introduce Go support for the ...