上一篇 2d游戏地图渲染图层顺序
讲了大概的思路,下面我们来看看具体的代码。
1.基础准备
1.1.提供一个结构体用于存放建筑物指针和建筑物的度edge
struct BUILDING_EDGE{
CityNodes cityNode;
int edge = 0;
};
1.2.提供一个结构体用于表达建筑物覆盖关系
struct NODE_FROM_TO {
CityNodes fromNode;
CityNodes toNode;
};
表示fromNode 覆盖 toNode
1.3.提供一个map用于存放建筑物ID和他的度edge
map<int, BUILDING_EDGE> buildingEdge;
1.4.提供一个list用于记录建筑物覆盖关系
list<NODE_FROM_TO> nodeList;
1.5提供一个queue用于存储需要输出的渲染的建筑物顺序
queue<CityNodes> drawQueue;
2.程序设计思路
2.1画建筑物原则
城市节点需要记录x,y坐标上节点是否可用
如果鼠标移动到x,y坐标上该节点为可用状态,并且我们需要画的建筑物A,假设A占地空间为2*2个格子,即当前(x,y) (x,y-1) (x+1,y) (x+1,y-1)格子均要可以使用才能安放建筑物
2.2 FindNodeEdge方法去找到每个建筑物的度edge
假设下图AB两个建筑物,经过大量的建筑物遮挡图片发现
建筑物主体高度不超过一个格,即B建筑物对A建筑物的遮盖可以看做是(x,y+1)位置是否存在建筑物。以及如下图黄色圈圈处都需判断是否存在建筑物。如果存在建筑物,那么这些建筑物就应该对本建筑物造成遮盖。即表达为fromNode