前言
上次显示了地图,只不过地图上只有地面贴图,这次要在上面显示更多的元素,并且用鼠标来设置地图。这样编辑器大部分工作就完成了。
正题
要让GMap能响应鼠标事件,所以新建一个类从GMap继承,就叫EMap,这个地图中,当鼠标点击一个元素后,回记录该元素,然后在地图上点击的时候,就会放置该元素。
class EMap : public GMap
{
public:
EMap();
//鼠标在控件上
bool isMouseMoveOn();
//鼠标左键按下
bool isMouseLeftButtonDown();
//设置元素
void setBlock(int x,int y,int z,int ShaderIndex,int VertexIndex,int TextureIndex);
~EMap();
};
这是EMap类的设计。在原来地图的基础上增加了事件响应。
地图被修改的关键代码就是设置地图块信息部分。
void EMap::setBlock(int x,int y,int z,int ShaderIndex,int VertexIndex,GLTexture * texture)
{
GLTexture *t =&map[x][y][z] ;
*t = *texture;
map[x][y][z].setProgram(GLSTD_TOOLS::SHADER[ShaderIndex]);//写死代码
map[x][y][z].setPos(vec3(x*32+pos.x,y*32+pos.y,z));
//map[x][y][z].addAnim(GLSTD_TOOLS::TEXTURE[TextureIndex]);
map[x][y][z].setCover(0);
map[x][y][z].setMesh(GLSTD_TOOLS::VERTEX[VertexIndex].VAO,GLSTD_TOOLS::VERTEX[VertexIndex].zoom,GLSTD_TOOLS::VERTEX[VertexIndex].size);
}
并且在GameBlockButton类中加入了记录元素下标的,但这个还不是最终方案,先看效果。
现在图片都是静态的,往后会有动态效果。