前言
游戏中,少不了游戏人物,地图砖块等,这次我们就开始设计这些元素,然后将其显示出来,为了可以在后面的开发中方便一些,先对其进行类的设计。
正题
目前是2D游戏,所以我们的元素2D就足够了,根据之前对按钮设计的经验来看,我们可以直接从2DPlane继承,我打算先从魔塔的地图编辑器写,目前,先显示元素块按钮。
类中多了几个变量,这个是要按钮能有放大缩小的效果,暂时还没有效果,但是可以借机会看看显示的结果。
显示了几个元素,这个元素写在了另一个场景里,我们可以试一下场景切换的效果。
经历了一系列的改动,这里就不贴代码了,会在最后给整个源码链接。现在可以切换场景了。
下面给元素块按钮添加动画,一段很短的代码。
void EditScene::mouseMove(GLFWwindow*window ,double xpos,double ypos)
{
for(int i=0;i<btn_num;i++)
{
if(btn_block[i]->isMouseMoveOn())
{
btn_block[i]->setMax();
}
else
{
btn_block[i]->setMin();
}
}
}
按钮移动上去的时候,修改位置矩阵,使其着色器中的矩阵有了缩放功能,这样就实现了鼠标经过放大的效果。但是细心一些就会发现,当一个按钮放大时候,会背没有放大的遮挡,而我们需要的效果是放大的在最前端,这是绘制顺序,所以我们做如下修改。
void EditScene::mouseMove(GLFWwindow*window ,double xpos,double ypos)
{
for(int i=0;i<btn_num;i++)
{
if(btn_block[i]->isMouseMoveOn())
{
btn_block[i]->setMax();
lastbtnBlock = i;
}
else
{
btn_block[i]->setMin();
}
}
}
加入一个变量来记录哪个是正在放大的,然后再最后绘制一遍即可。
void EditScene::draw()
{
for(int i=0;i<btn_num;i++)
{
btn_block[i]->draw();
}
btn_block[lastbtnBlock]->draw();
}
这样看起来好多了。