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;
时间: 2024-08-08 22:06:17

GameMap地图初始化的相关文章

ORB-SLAM简介(三)之地图初始化

单目SLAM地图初始化的目标是构建初始的三维点云.由于不能仅仅从单帧得到深度信息,因此需要从图像序列中选取两帧以上的图像,估计摄像机姿态并重建出三维点云. 地图初始化的一种方法为追踪一个已知物体.单帧图像的每一个点都对应于空间的一条射线.通过不同角度不同位置扫描同一个物体,期望能够将三维点的不确定性缩小到可接受的范围. 另一种方法基于假设空间存在一个平面物体,选取两帧不同位置的图像,通过计算Homography或者Essential matrix来估计位姿.这类方法在视差较小或者平面上的点靠近某

android 百度地图系列之地图初始化及定位

在Android应用中,很多时候需要地图功能,回顾过去写的项目和百度地图api,开始总结一下Android百度地图的实现.首先总结一下怎么开始一个Android百度地图功能. 当使用百度地图的时候,提到一个appkey."在使用百度地图SDK为您提供的各种LBS能力之前,您需要获取百度地图移动版的开发密钥,该密钥与您的百度账户相关联.因此,您必须先有百度帐户,才能获得开发密钥.并且,该密钥与您创建的过程名称有关.Key地址为:http://lbsyun.baidu.com/apiconsole/

百度地图初始化时设置地图的状态(转)

//初始化地图     MapView mMapView = (MapView) findViewById(R.id.map); BaiduMap mBaidumap = mMapView.getMap(); //设定中心点坐标 LatLng cenpt = new LatLng(29.806651,121.606983);          //定义地图状态         MapStatus mMapStatus = new MapStatus.Builder()         .targ

GameMap其他初始化

//其他初始化 init_prop();//初始化道具 init_ornamemtal();//初始化装饰物 init_monster_type_info();//初始化怪物基本信息 这个比较重要在加载NPC时会用到这些基本信息的储存在m_monster_type_infos[mo_type_info.nBodyID] = mo_type_info; 貌似战斗模拟器也要用到这些数值 init_region();//具体的区域有安全区,战斗区,摆摊区... init_skill_info();初始

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

如题,同样是百度地图SDK开发过程中遇到的一个问题,交代下背景: 开发了一款内嵌百度地图的应用,因此里面差不多将目前百度地图SDK开放的主要功能都用到了,定位,地图显示,覆盖物标示,POI搜索,行程路线规划,GPS导航..等等都有.开发最开始用到的SDK版本因为是整合版本,因此各个功能部分的SDK都不确保是最新的,也就没有遇到诸如论坛上的好多仁兄遇到的将分别下载的几个单独的SDK包集成到一个应用中引发的冲突的问题,毕竟之前用的整合包导航SDK还是1.1的定位SDK还是5.3的地图SDK则用的是3

高德地图初始化 ios

最新版本的高德地图AMap_iOS_API_Lib_V2.1.1 2,这个可以到高德地图官网下载,并且按照官网给的步骤加载库,等我们加载完后要申请一个高德地图apiKey,这个非常容易.然后在我们想初始化地图的地方写上 [MAMapServices sharedServices].apiKey [email protected]"7e475dd3713565015cac7ea667977a63";这个key是我自己申请的  ,没有key的话地图不会显示出来,这样程序可以跑起来了   但

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

有些时候我们会有这样的业务:当用户根据地址跳转到地图后,希望能够立即弹框展示该poi的地址信息. 实现方法: 百度地图3.0+的类BaiduMap中提供了一个方法showInfoWindow(InfoWindow infoWindow):显示 InfoWindow,而这个方法就是处理这个问题的关键. 再初始化地图时实现以下内容就可以实现自动弹框效果 //初始化一个view view = getLayoutInflater().inflate( R.layout.activity_choose_l

javascript调用百度地图,以及城市的初始化

地图的构建非常简单,官方的API文档也写得很清晰,我只做一总结: 一.引入JS:这个很容易理解,既然是调用JS版的百度地图,肯定得引用外部的JS文件了,而这个文件来自百度的服务器(所以必须得联网,不然就没戏..),我们以后用到的所有方法都写在这个JS文件当中. <script type="text/javascript" src="http://api.map.baidu.com/api?v=1.4"></script> 这里的1.4为JS版

baidu地图:实现多点连线渲染

<script type="text/javascript"> var points = [ {"Lng":120.17787645967861,"Lat":30.251826748722667}, {"Lng":120.17786646842835,"Lat":30.251826580357911} ]; </script> <!DOCTYPE html> <ht