今天给大家介绍一下如何在游戏中实现对话框,我们先来看一下游戏中对话框的效果,运行结果如下:
对话框自带一个蓝色的掩码层,掩码层上面显示对话框,点击“确定”按钮将关闭对话框。我们将在游戏主面板中添加一个“显示游戏规则”按钮,用户点击此按钮后将显示“游戏规则”对话框。首先,我们需要对游戏主面板的代码进行修改,因为它新增了一个子控件——显示游戏规则按钮;接下来,还需要修改UI类的事件处理代码,父控件需要处理事件时,在子控件未能处理事件时不返回false(返回false将让下一控件处理事件),而是让子控件的父控件处理事件。我们先给游戏主面板添加一个表示父控件是否需要处理事件的变量bSelfHandle,如下图所示:
接着看UI类的事件处理函数handle()代码,修改的地方如下:
如果子控件未能处理事件,且父控件需要处理事件,则让主控件处理事件(此处直接调用事件清理函数clear()),接下来我们看看对话框类gxsDialog的实现代码
gxsDialog继承自gxsUI类,其构造函数带参数,用来初始化控件名称,注意那句gxsUI.call(this);用来初始化aChildUI数组。此类共有三个成员函数:initParameter()、drawMask()和draw(),initParameter()函数主要用来初始化对话框大小、位置。drawMask()用来绘制掩码层,它的代码如下:
此函数主要完成以下工作:获取游戏主面板位置及大小,获取游戏主面板图像数据,然后依次对其中的每一个像素与蓝色进行alpha混合运算(颜色值各占50%),最后将运算后的图像数据复制回原处,这样就实现了透过蓝色掩码层能看见游戏主面板的效果。现在,我们来看看绘制对话框函数draw()的代码
首先画对话框的掩码层,接着画对话框(以图片形式显示),最后画出子控件(确定按钮)。注意:在我们使用对话框、确定按钮之前需要初始化它们,对话框的初始化通过上图的var g_oRuleDialog=new gxsDialog("rule");这一条语句实现,那么显示游戏规则按钮及确定按钮是如何初始化的呢?大家先想一想,之前我们已经使用过按钮控件了,它们的初始化应该是类似的。好了,不绕弯子了,直接上代码:
很简单,直接调用gxsButtonUI类的构造函数即可,但有一点要注意,我们需要给出相应的初始化参数,否则控件初始化时会失败,那么在哪里给出初始化参数呢?相信大家一定想到了,这个地方就是控件初始化数组g_aControlPara!好了,看代码:
上图是显示游戏规则按钮的初始化参数,fcb回调函数很简单,清除事件并将游戏状态值改为3,同时将消息响应优先级也改为3;初始化参数里起始坐标及宽高值初始化值均为设计尺寸,在游戏运行是会进行缩放适配屏幕。消息响应优先级为2,同游戏主面板同级。最后是使用的图片数组。接着看看确定按钮的初始化参数,代码如下:
与显示游戏规则按钮的初始化参数类似,此处不多说了,大家自行研究代码。最后让我们来看看对话框的初始化参数,代码见上图。注意它的子控件数组,只有一个元素值14,表示只有一个确定按钮(在控件初始化数组g_aControlPara中的索引为14)子控件。最后,将今天的内容录了一个视频,文章未提到的地方可以参看视频。
未完待续,敬请关注!后续更精彩,谢谢大家!