GameMap地图初始化
init_map(res_path)
.初始化mapbase的基本信息
pos2d screen_area = {, }; //普通屏幕大小
m_spBase->init(screen_area.x / , screen_area.y / , //屏幕划分成3*3格子
header.map_size_item.base_size.x,
header.map_size_item.base_size.y ); //map格子单位大小
初始化了mapbase里面的map格子的大小为48*,block大小1000/,/3这些单位都是像素 .初始化m_mapCellMgr基本信息
屏幕大小:*
新手村:*
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(){}
virtual bool isBlocking()const = ; //是否为阻塞的
};
// 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[].size(); m_allMapCell.resize(m_w);
for(int x = ; x < m_w; ++x)
{
m_allMapCell[x].resize(m_h);
for(int y = ; y < m_h; ++y)
{
auto& cell = m_allMapCell[x][y];
cell.m_baseFlag = mapBlockInfo[x][y];//只初始化了这个地图基础阻塞信息
cell.m_pObjList = nullptr;
}
}
}
.计算地图的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 / ) + ; //多出4格预防外围(满足7x7范围控制
int block_h_num = map_all_h / (screen_area.y / ) + ;
.角色(玩家和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); //角色
.魔法管理器初始化
std::vector<std::vector<std::map<pos2d, SpellObj*> > > m_spellsBlock; // 所有魔法(key:block pos)
m_mapCellMgr.m_spellsBlock.resize(block_w_num); //魔法
.道具管理器容器初始化
m_mapCellMgr.m_itemsBlock.resize(block_w_num); //道具物品
std::vector<std::vector<std::map<size_t, ItemObj*> > > m_itemsBlock; // 所有道具(key:uid)
.装饰物容器初始化
struct role_node //角色节点(NPC、怪物、装饰物)
{
pos2d point; //坐标
int id; //id
std::string name; //名称 void clear()
{
point.clear();
id = ;
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);
.起来类的map指针初始化,对于为什么要加入这个map指针,说是为了访问map里面的那些共有的变量也是。
TeamOption.m_TeamMap = this;
ShopOption.m_ShopMap = this;
TradeOption.m_TradeMap = this;
Relation.m_RelationMap = this;
GameMap地图初始化的更多相关文章
- ORB-SLAM(三)地图初始化
单目SLAM地图初始化的目标是构建初始的三维点云.由于不能仅仅从单帧得到深度信息,因此需要从图像序列中选取两帧以上的图像,估计摄像机姿态并重建出初始的三维点云. ORB-SLAM中提到,地图初始化常见 ...
- acgis地图初始化并根据经纬度进行标注
根据项目要求,需要对指定的位置进行标注. 1.初始化地图服务 2.根据地图服务接口信息进行标注 3.根据经纬度信息进行标注 展示接口截图: 以下代码并不能直接粘贴跑起来,因为代码所涉及的文件地址都是内 ...
- GameMap其他初始化
//其他初始化 init_prop();//初始化道具 init_ornamemtal();//初始化装饰物 init_monster_type_info();//初始化怪物基本信息 这个比较重要在加 ...
- 3.0+百度地图在地图初始化的时候就弹框展示一个信息框,而不是用户点击poi时才弹出
有些时候我们会有这样的业务:当用户根据地址跳转到地图后,希望能够立即弹框展示该poi的地址信息. 实现方法: 百度地图3.0+的类BaiduMap中提供了一个方法showInfoWindow(Info ...
- Android百度地图SDK 导航初始化和地图初始化引起的冲突
如题,相同是百度地图SDK开发过程中遇到的一个问题.交代下背景: 开发了一款内嵌百度地图的应用,因此里面差点儿相同将眼下百度地图SDK开放的主要功能都用到了,定位,地图显示,覆盖物标示.POI搜索,行 ...
- 百度地图的初始化应当在vue的mounted()函数里执行
今天使用百度地图出现了一个问题,百度地图初始化后宽.高都是0,但是地图容器宽高都设置好的, 一开始怎么都排除不出问题,后来无语了,把布局直接复制进入百度地图的示例里运行发现没有问题, 所以想到不是百度 ...
- arcgis api for js入门开发系列三地图工具栏(含源代码)
上一篇实现了demo的地图加载展示,在上篇实现的基础上,新增了地图工具栏以及通用地图控件功能,比如地图框选缩放.地图漫游.清空.量算工具.地图导航控件.地图比例尺控件.地图鹰眼图等等,总共分为5个部分 ...
- 百度地图JavaScript API [一]
参考网址: http://developer.baidu.com/map/index.php?title=jspopular/guide/widget 1.申请密钥(ak) http://api.ma ...
- 吐槽贴:百度地图 api 封装 的实用功能 [源码下载]
ZMap 类 功能介绍 ZMap 是学习百度地图 api 接口,开发基本功能后整的一个脚本类,本类方法功能大多使用 prototype 原型 实现: 包含的功能有:轨迹回放,圈画区域可编辑,判断几个坐 ...
随机推荐
- WordPress 主题开发 - (十三) Archive模板 待翻译
What archive.php does (and all its related templates) is show posts based on a select criteria. A da ...
- WIN8+VS2013编写发布WCF之二(部署)
上文简介了如何建立WCF工程并且调试,下面说一下如何部署. 本文将陆陆续续讲述三种部署方式,随着项目的进展将不断补全. 声明: 用管理员身份打开VS2013,发布前请将程序的.net版本改成与服务器相 ...
- UCOS2_STM32F1移植详细过程(二)
Ⅰ.概述 打开上一篇文章新建的工程,是提取的ST标准库里面源代码文件和UCOS工程包源代码文件.下载过的朋友可能会知道,直接编译那个工程会有大片的错误和警告,原因在于那个工程是没有经过修改源代码的工程 ...
- 9.python的布尔类型与流程控制
布尔类型其实可以算是一种特殊的数字,下面是 help() 函数得到的帮助信息: Help on class bool in module __builtin__: class bool(int) | ...
- SQL基础篇——如何搭建一个数据库
特别提醒:所有的新建数据库,表,行,列都可以通过对象资源管理器操作,下面所讲的为查询操作方法 一.新建数据库 使用CREATE DATABASE语句建立数据库: 新建查询-- CREATE DATAB ...
- NOJ1103-全排列
全排列 时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KByte总提交 : 1148 测试通过 : 302 ...
- spring aop 使用注解方式总结
spring aop的注解方式:和xml的配置方式略有区别,详细如下: 1.首先还是建立需要的切面类:切面类里面定义好切点配置,以及所有的需要实现的通知方法. /** * */ package com ...
- C#中的Attribute
最近用到了,所以静下心来找些资料看了一下,终于把这东西搞清楚了. 一.什么是Attribute 先看下面的三段代码: 1.自定义Attribute类:VersionAttribute [Attribu ...
- php xml转为xml或者json
<?php class XmlToArray { private $xml; private $contentAsName="content" ; private $attr ...
- 在ASP.NET中实现OAuth2.0(一)之了解OAuth
1.什么是OAuth2.0 是一个开放授权标准,允许用户让第三方应用访问该用户在某一个网站或平台上的私密资源(如照片.视频.联系人等),而无须将用户名和密码提供给第三方应用 2.OAuth2.0授权模 ...