OpenGL游戏制作之路[第四篇 游戏控件之游戏元素块(1)]---2D游戏---(注:此版本作者处于探索阶段,希望能得到读者的指教和建议)

前言

游戏中,少不了游戏人物,地图砖块等,这次我们就开始设计这些元素,然后将其显示出来,为了可以在后面的开发中方便一些,先对其进行类的设计。

正题

目前是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();
}
解决了遮挡效果

这样看起来好多了。

源码

本次的源码和文件

发布了64 篇原创文章 · 获赞 16 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/ARTELE/article/details/87205138