第三章:分析界面
在前一章,我们主要讲的是主界面,现在我们来讲一下在游戏过程中的界面.我们先来分析一下两个mod的界面(注:在这一章里所讲的主界面是指mod的主界面而不是饥荒游戏的主界面)
CJBModsTMI和testtools
打开CJBModsTMI(以下简称C!),的原文件夹,找到tmiscreen.lua文件,它的界面
就是这个定义在这个文件里的.
它导入了两个自定义的自定义的部件,Inv和HoverText,
一个是用来显示那些格子的,一个是用来显示文字的,这样可以把一个界面分成几个部分,代码看起来就不会太复杂,我们可以一部分一部分的看.
主界面增加了背景,导入了两个自制的控件,增加了一个关闭按钮.
下面我们来看一下关闭按钮的事件函数
这个应该就是一个标准的关闭函数了,首先把暂停去掉,把主界面删掉,前台显示
的界面设置为空.
我们继续看一下这个主界面的其余函数,
几个很简单的函数.
在这个mod的modmain文件里,创建了一个新的timkeyHand类这个类里拥有一个
keyHandler的实例,他有一个自定义函数,OnRawKey.
keyHandler是Input(输入)类的一个子类,他的构造函数函数为
TheInput:AddKeyHandler(fn)
TheInput是一个Input类的实例,这个函数接受一个函数作为参数,生成一个新的
事件,并向这个参数函数(fn)传递两个参数key,down.饥荒游戏的运行中,我们每一次按下键盘,或者移动鼠标等,都会被Input捕获,并处理input分析事件类型,(比如是按下键盘,还是点击鼠标)并调用对应的事件列表,
onkey,----键盘事件(包括按下和弹起)
onkeyup----键盘被弹起
onkeydown---键盘按下
onmouseup----鼠标按下
onmousedown---鼠标弹起
position----位置改变
oncontrol---窗口控制权改变
ontextinput---文本框
ongesture---手势(这个在pc版的饥荒里没有使用)
调用对应的事件列表,并再次判断具体的事件类型(比如是A键,T键被按下还是任意
键被按下)把所有符合的事件函数调用.
继续讲这个mod,modmain.lua创建了一个新的KeyHandler类,事件类型为onKey,见
input.lua
在modmain.lua里只是增加了一个类,还要创造一个实例才能用.
这一句创建了一个新的实例.
testtool这个mod比较复杂.它的主窗口文件为,testscreen.lua.
我们主要看doinit函数.
普及一下
Spinner就是
控件,他的构造函数为options是一个型如
的表
width,height,宽度,高度.
textinfo主要是用来控制中间字体的,它是一个型如
的表.
sditable是一个布尔值,为true时,中间文本可以编辑.缺省为false.atlas和texttures是用来改变图片的.
doinit函数,首先设置背景和底板.我就不讲了
之后创建菜单列表,#1
再创建所有的Spinner控件.#1
把所有的Spinner加入spawning_spinners表里,并增加文本提示.#2
主界面设置spinners为spawning_spinners#3.
#1
#2
#3
回过头来继续讲一下Spinners
每个Spinners控件,内容改变时,都会调用Changed函数,并将显示文本对应的data
值传入onchanged函数.
每一个Spinner都有一个默认的onchanged函数,
不过我们可以重新定义这个函数,增加功能.