游戏UI可以说是整个游戏的基石,在每个面板中都包含了各种控件,控件则可以说是UI的组成成分,是它的元素,
游戏UI程序设计与开发
。目前的开发流程和情况是:在开发前,由策划提出需要那些控件,然后程序根据需求开发出达到效果的控件。在用这些控件拼UI的时候就出现了不少问题,因为策划在提出需求,需要哪些控件的时候并没有给出之后设计出来的成型的UI图,导致后面的开发过程中不断在调整控件以适应当前UI所要达到的效果,又由于之前控件的设计没有能考虑到现在所碰到的需求,而没有相应的扩展性,那么就在不断的修改中将控件和UI的耦合性提高了,随着新UI出现,新需求出现,甚至可能临时要增加新的控件来满足要求,在不断的增加需求,改变需求的过程中,控件的功能也在不断改变,想要能以很低的耦合性满足所有不断更新的需求,这样好扩展性的控件是不容易设计的。长此以往,就算是勉强完成了策划的需求,UI达到预期效果,但是代码层面的混乱就无法避免了,以后的修改和维护将会变的很难。
我认为UI里的控件在开发之前必须要好好设计,控件的扩展性,健壮性都要注意,尽量降低它和具体UI的耦合性,而且需求不能一变再变。这就要求在开发前,策划能拿出所有面板的效果图,程序和策划讨论根据效果图来确定最终需要那些控件,控件的具体功能是什么,明确的详细的效果,让策划来描述,程序根据这些详细的需求来周全的设计控件,通用的地方进行封装,需要变化的地方留出接口,比如留出该控件的画图事件和点击函数事件来根据具体情况具体写,最好还能留出一个类似友元函数的接口,让外面的方法能够读到控件里面的数据,而不总是用全局变量解决问题,全局变量的时效性不好控制,比如有个按钮要读取某个包裹里的值,用全局变量记录了选中包裹中的值,这样就要在选中状态消失的时候消除掉全局变量的值,否则,我没有选中任何包裹,依然可以点击按钮进行操作,这样就不对,但是在选中状态消失的每个出口都要检测就让程序变的很杂乱,同样就像面板关闭一样,如果用全局变量记录了面板里的值就在在面板消失的所有出口进行消除全局变量,这样的程序太杂乱,
电脑资料
《游戏UI程序设计与开发》(https://www.unjs.com)。单个的控件只要注意自己的封装行,保持自己的低耦合性,就比较不错了。在lua里面,控件的封装是利用表的原表特性,目前接触到的控件结构是把所有控件集合在一个全局表里,这一个表里面装了所有的控件,这就涉及到在一次点击中会遍历所有的控件来查找该那个控件响应,那么如果一次点击事件的坐标(可能在点击过程中带有拖动)击中了两个控件的有效区域,如果不加区分处理,就会触发两个控件的响应,除非是故意要达到这种效果之外,我觉得最好的效果应该是,在点击按下的时候判断是击中了哪个控件,那么在之后的拖动和抬起事件中,整个屏幕上都只响应这一个控件的点击事件,就算拖动过程和抬起处在了别的控件上,也屏蔽掉其他的非选中控件的点击事件。还有控件的点击事件触发只有一种情况,就是在点击和抬起的时候都在该控件的有效点击范围内,中间的拖动动作经过了什么地方都不用管,因为屏蔽了其他控件的响应,不会造成什么错乱。这些算是控件自身点击事件的严谨性吧。