游戲UI可以說(shuō)是整個(gè)游戲的基石,在每個(gè)面板中都包含了各種控件,控件則可以說(shuō)是UI的組成成分,是它的元素,
游戲UI程序設(shè)計(jì)與開(kāi)發(fā)
。目前的開(kāi)發(fā)流程和情況是:在開(kāi)發(fā)前,由策劃提出需要那些控件,然后程序根據(jù)需求開(kāi)發(fā)出達(dá)到效果的控件。在用這些控件拼UI的時(shí)候就出現(xiàn)了不少問(wèn)題,因?yàn)椴邉澰谔岢鲂枨,需要哪些控件的時(shí)候并沒(méi)有給出之后設(shè)計(jì)出來(lái)的成型的UI圖,導(dǎo)致后面的開(kāi)發(fā)過(guò)程中不斷在調(diào)整控件以適應(yīng)當(dāng)前UI所要達(dá)到的效果,又由于之前控件的設(shè)計(jì)沒(méi)有能考慮到現(xiàn)在所碰到的需求,而沒(méi)有相應(yīng)的擴(kuò)展性,那么就在不斷的修改中將控件和UI的耦合性提高了,隨著新UI出現(xiàn),新需求出現(xiàn),甚至可能臨時(shí)要增加新的控件來(lái)滿足要求,在不斷的增加需求,改變需求的過(guò)程中,控件的功能也在不斷改變,想要能以很低的耦合性滿足所有不斷更新的需求,這樣好擴(kuò)展性的控件是不容易設(shè)計(jì)的。長(zhǎng)此以往,就算是勉強(qiáng)完成了策劃的需求,UI達(dá)到預(yù)期效果,但是代碼層面的混亂就無(wú)法避免了,以后的修改和維護(hù)將會(huì)變的很難。
我認(rèn)為UI里的控件在開(kāi)發(fā)之前必須要好好設(shè)計(jì),控件的擴(kuò)展性,健壯性都要注意,盡量降低它和具體UI的耦合性,而且需求不能一變?cè)僮。這就要求在開(kāi)發(fā)前,策劃能拿出所有面板的效果圖,程序和策劃討論根據(jù)效果圖來(lái)確定最終需要那些控件,控件的具體功能是什么,明確的詳細(xì)的效果,讓策劃來(lái)描述,程序根據(jù)這些詳細(xì)的需求來(lái)周全的設(shè)計(jì)控件,通用的地方進(jìn)行封裝,需要變化的地方留出接口,比如留出該控件的畫(huà)圖事件和點(diǎn)擊函數(shù)事件來(lái)根據(jù)具體情況具體寫(xiě),最好還能留出一個(gè)類似友元函數(shù)的接口,讓外面的方法能夠讀到控件里面的數(shù)據(jù),而不總是用全局變量解決問(wèn)題,全局變量的時(shí)效性不好控制,比如有個(gè)按鈕要讀取某個(gè)包裹里的值,用全局變量記錄了選中包裹中的值,這樣就要在選中狀態(tài)消失的時(shí)候消除掉全局變量的值,否則,我沒(méi)有選中任何包裹,依然可以點(diǎn)擊按鈕進(jìn)行操作,這樣就不對(duì),但是在選中狀態(tài)消失的每個(gè)出口都要檢測(cè)就讓程序變的很雜亂,同樣就像面板關(guān)閉一樣,如果用全局變量記錄了面板里的值就在在面板消失的所有出口進(jìn)行消除全局變量,這樣的程序太雜亂,
電腦資料
《游戲UI程序設(shè)計(jì)與開(kāi)發(fā)》(http://www.szmdbiao.com)。單個(gè)的控件只要注意自己的封裝行,保持自己的低耦合性,就比較不錯(cuò)了。在lua里面,控件的封裝是利用表的原表特性,目前接觸到的控件結(jié)構(gòu)是把所有控件集合在一個(gè)全局表里,這一個(gè)表里面裝了所有的控件,這就涉及到在一次點(diǎn)擊中會(huì)遍歷所有的控件來(lái)查找該那個(gè)控件響應(yīng),那么如果一次點(diǎn)擊事件的坐標(biāo)(可能在點(diǎn)擊過(guò)程中帶有拖動(dòng))擊中了兩個(gè)控件的有效區(qū)域,如果不加區(qū)分處理,就會(huì)觸發(fā)兩個(gè)控件的響應(yīng),除非是故意要達(dá)到這種效果之外,我覺(jué)得最好的效果應(yīng)該是,在點(diǎn)擊按下的時(shí)候判斷是擊中了哪個(gè)控件,那么在之后的拖動(dòng)和抬起事件中,整個(gè)屏幕上都只響應(yīng)這一個(gè)控件的點(diǎn)擊事件,就算拖動(dòng)過(guò)程和抬起處在了別的控件上,也屏蔽掉其他的非選中控件的點(diǎn)擊事件。還有控件的點(diǎn)擊事件觸發(fā)只有一種情況,就是在點(diǎn)擊和抬起的時(shí)候都在該控件的有效點(diǎn)擊范圍內(nèi),中間的拖動(dòng)動(dòng)作經(jīng)過(guò)了什么地方都不用管,因?yàn)槠帘瘟似渌丶捻憫?yīng),不會(huì)造成什么錯(cuò)亂。這些算是控件自身點(diǎn)擊事件的嚴(yán)謹(jǐn)性吧。