青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

飯中淹的避難所~~~~~

偶爾來避難的地方~

  C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
  94 隨筆 :: 0 文章 :: 257 評論 :: 0 Trackbacks

在過去的8年里,我經(jīng)過數(shù)次失敗的GUI系統(tǒng)設(shè)計經(jīng)歷,最終找到了一種算是可以的方案。這個方案使用一種類似MVC的架構(gòu)。主要有以下幾個大的部分:

【sprite系統(tǒng)】

sprite是一個從古老的游戲中一直演化過來的概念,而在這里,它代表了屏幕上的一個次元(層)中所有可見元素。

它描述了一個屏幕上的矩形,以及和其他矩形的關(guān)系。

它具有自己的更新和繪制方法。

它具有自己的各種特性,比如可拖動,比如事件冒泡。

同時,它還有一個稱為控制器的東西,這個東西會在創(chuàng)建或者attach的時候?qū)prite進行修改或者初始化。會處理sprite的輸入事件,并可以接管sprite的繪圖處理。

【UI元素】

UI元素是sprite的控制器接口的實現(xiàn)。并且會在初始化時去創(chuàng)建sprite,以達到顯示的目的。

一個UI元素就代表一個UI控件,比如一個編輯框,或者是一個combobox。

每個UI元素上都有數(shù)個事件的插槽,應(yīng)用程序可以通過向這些插槽插入事件處理來關(guān)注UI元素。

【UI腳本】

UI元素的插槽不僅可以插入一個事件處理,還可以插入一個UI腳本的方法索引。

而腳本系統(tǒng)和腳本方法索引,都是接口和無特定指向意義的數(shù)值類型,方便腳本擴展。

【引擎接口】

因為UI系統(tǒng)中會用到繪圖,貼圖,聲音,為了通用性,這些都被抽象為接口,以便于不同引擎的支持。

但是這個里面有一點非常重要,就是一定不要依賴于某個特定引擎或者平臺的特性進行接口設(shè)計,那會讓你束手束腳。

【資源管理】

因為UI系統(tǒng)中會涉及到比較多資源,所以,所有資源都被統(tǒng)一管理起來。通過字符串來進行資源索引。返回的是資源的接口指針。

在資源管理內(nèi)部,對每種資源都有一個緩沖池。當(dāng)然只做按名字緩沖,畢竟比較深層次的資源緩沖還要依賴引擎接口來完成。

資源里主要有以下幾種:圖像(貼圖組合動畫),貼圖,聲音,字體。

【文字繪制】

文字繪制,由字體資源和繪圖引擎接口共同來完成。


字體資源里有個中間件,用來管理字體的緩存,目前是采用256級灰度點陣來存儲,在各種繪圖引擎和平臺中都可以方便的轉(zhuǎn)化為屏幕圖元,并且還有灰度來保障邊緣混淆的正確顯示。

【關(guān)于繪圖系統(tǒng)】

繪圖系統(tǒng)中,GUI的需求主要是 貼圖, 繪制簡單的矩形邊框矩形填充, 繪制線條, 裁剪。

GDI繪圖,一開始就被放棄了,因為它的整個系統(tǒng)的繪圖特性過多,會導(dǎo)致關(guān)注點的分散。為了替代GDI繪圖,我實現(xiàn)了一套內(nèi)存位圖的繪圖庫。不過最終這個庫還是會把結(jié)果丟到GDI的HDC上,只是中間過程里,都是在內(nèi)存中進行圖像的各種混合。

DX和OGL,因為這兩個都可以支持貼圖,所以實現(xiàn)UI系統(tǒng)需要的接口完全沒有問題。在實際GUI的編碼和測試中,我使用HGE這個DX的封裝接口來間接實現(xiàn)了UI系統(tǒng)所需的繪圖接口。


【數(shù)據(jù)源】

UI系統(tǒng)里,每個UI元素都是從數(shù)據(jù)源中進行讀取并創(chuàng)建的。

數(shù)據(jù)源是一個純虛接口的形式,在實際編碼和測試中,我使用的是XML作為數(shù)據(jù)源。

XML既有良好的可讀性,又易于程序處理。非常適合在這里作為數(shù)據(jù)源。

【UI編輯器】

相應(yīng)的,生成數(shù)據(jù)源的部分,就是靠UI編輯器。

UI編輯器本身也是通過UI系統(tǒng)實現(xiàn)的。

UI編輯器主要包括幾個部分:布局編輯器、貼圖撿取、屬性編輯。其中布局編輯器這里,每個控件的繪制仍舊調(diào)用的是它自身的繪圖方法,不過為了防止觸發(fā)控件本身的事件,我用一個控件編輯容器樹,代替了原來的控件元素樹,樹結(jié)構(gòu)還是使用原有的結(jié)構(gòu),控件被作為空間編輯容器的子元素。


【歷史】

2002年 第一版UI系統(tǒng)   繪圖使用DIRECTDRAW,采用UI元素和UI視覺元素統(tǒng)一的方法,采用一棵樹進行繪制和UI自身的管理。沒有數(shù)據(jù)源,沒有編輯器,沒有腳本系統(tǒng),完全試驗品。失敗原因:UI元素的設(shè)計問題,以及架構(gòu)不完善。

2005年 第二版UI系統(tǒng) 繪圖采用D3D,采用UI元素和UI視覺元素統(tǒng)一的方法,采用一棵樹進行繪制和管理。無數(shù)據(jù)源,無編輯器,無腳本系統(tǒng),有事件處理插槽,在客戶端進行了小規(guī)模的使用。

2008年 第三版UI系統(tǒng) 繪圖采用抽象接口,有GDI(內(nèi)存位圖)和D3D實現(xiàn)。采用UI元素和UI視覺元素統(tǒng)一的方法,一棵樹繪制和管理。有數(shù)據(jù)源,無編輯器,無腳本系統(tǒng),僅在開發(fā)和測試環(huán)境內(nèi)進行了使用。失敗原因:糾結(jié)在UI元素布局的管理上,后發(fā)現(xiàn)是UI元素的設(shè)計有問題。

2009年 第四版UI系統(tǒng) 繪圖采用抽象接口,有GDI(內(nèi)存位圖)和D3D(HGE),采用UI元素和UI視覺元素統(tǒng)一方法,一棵樹繪制和管理,有數(shù)據(jù)源,有編輯器。失敗原因:UI元素和視覺元素統(tǒng)一的方法,給UI元素的管理和UI元素的邏輯實現(xiàn)帶來很大限制。

2011年 第五版UI系統(tǒng) 繪圖采用抽象接口,有GDI(內(nèi)存位圖)和D3D(HGE),采用UI元素和UI視覺元素分開的方法,分為一顆邏輯樹,一顆視覺樹。數(shù)據(jù)源仍舊用XML,用第四版的編輯器實現(xiàn)方式。
posted on 2011-04-30 14:04 飯中淹 閱讀(2546) 評論(2)  編輯 收藏 引用 所屬分類: 游戲客戶端

評論

# re: 【游戲GUI】 2011-05-03 16:19 戰(zhàn)魂小筑
UI編輯器本身也是通過UI系統(tǒng)實現(xiàn)的
這點嚴(yán)重同意,哈哈, 能把自己的編輯器做出來的UI已經(jīng)很強大了,MyGUI就是這樣的.

我以前寫過的UI(http://m.shnenglu.com/sunicdavy/archive/2009/07/24/91059.html) 的邏輯部分學(xué)魔獸全腳本, 雖然套用了自己寫的lua調(diào)試器,但是越寫到后面越累. 因此還是C++為主,腳本為輔的組合比較好  回復(fù)  更多評論
  

# re: 【游戲GUI】 2011-05-17 15:12 simfe
也不發(fā)張效果圖來看看  回復(fù)  更多評論
  

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲中无吗在线| 亚洲国内精品在线| 欧美成人免费播放| 久久久精品一区二区三区| 欧美亚洲综合网| 老司机精品视频网站| 欧美大尺度在线| 国产精品成av人在线视午夜片| 国产精品美女| 在线观看精品一区| 99精品热6080yy久久| 亚洲欧美一区二区原创| 久久久午夜视频| 亚洲免费电影在线观看| 亚洲综合清纯丝袜自拍| 久久嫩草精品久久久精品| 欧美日韩福利| 黄色国产精品| 亚洲一区二区在线| 牛夜精品久久久久久久99黑人| av成人免费在线| 乱码第一页成人| 亚洲国产黄色| 亚洲乱码一区二区| 久久国产精品久久久久久| 欧美日韩国产三区| 国内精品视频666| 正在播放亚洲| 你懂的亚洲视频| 香蕉久久夜色精品国产使用方法| 欧美精品一区二区三区在线看午夜 | 欧美午夜在线一二页| 黄色工厂这里只有精品| 亚洲欧美一区在线| 99国产精品视频免费观看| 麻豆精品国产91久久久久久| 国产午夜精品在线| 亚洲综合二区| 日韩亚洲一区在线播放| 欧美电影在线观看完整版| 在线观看国产精品网站| 久久久久久一区二区| 午夜国产精品影院在线观看| 欧美性视频网站| 一区二区三区精品久久久| 亚洲电影免费在线| 免费人成网站在线观看欧美高清| 永久免费视频成人| 玖玖综合伊人| 久久久久久久精| 黄页网站一区| 欧美高清视频一区二区三区在线观看| 久久久99免费视频| 伊人成人在线视频| 免费成人在线观看视频| 久久午夜电影网| 亚洲国产精品成人一区二区| 欧美韩国一区| 欧美国产日韩一区二区| 99re6这里只有精品视频在线观看| 亚洲第一网站| 欧美区高清在线| 亚洲一区日本| 午夜精品视频一区| 一区二区视频免费在线观看| 你懂的国产精品| 欧美黄色小视频| 宅男精品视频| 欧美一区不卡| 亚洲国产欧洲综合997久久| 亚洲国产精品成人| 欧美日韩成人激情| 午夜精品久久久久久久蜜桃app| 午夜精品久久久久| 亚洲高清不卡一区| 99在线精品视频在线观看| 国产精品日韩欧美大师| 久久一区二区三区超碰国产精品| 欧美一区二区三区四区高清| 一本色道久久综合亚洲精品按摩 | 欧美日韩国产91| 亚洲在线免费观看| 欧美在线视频一区| 一区二区三区在线视频播放| 亚洲欧洲日夜超级视频| 国产精品盗摄久久久| 久久久久久一区二区三区| 女同一区二区| 亚洲欧美中文日韩v在线观看| 久久福利精品| 国产精品99久久久久久www| 欧美在线一二三| 一区二区欧美视频| 久久国产精品99国产| 一区二区三区国产| 久久成人国产精品| 亚洲色图在线视频| 久久精品亚洲一区二区| 在线亚洲精品| 久久久久久夜| 性伦欧美刺激片在线观看| 免费欧美高清视频| 久久精品视频99| 亚洲午夜小视频| 久久久久久久欧美精品| 午夜国产不卡在线观看视频| 欧美高清视频一二三区| 久久看片网站| 国产精品久久久一区二区三区| 欧美成人综合在线| 国产欧美视频一区二区三区| 亚洲乱码精品一二三四区日韩在线 | 亚洲视频一区二区在线观看 | 欧美乱在线观看| 久久久久久久97| 国产精品大全| 99这里只有精品| 亚洲精品裸体| 久久夜色撩人精品| 久久亚洲春色中文字幕| 国产精品欧美精品| aa日韩免费精品视频一| 亚洲美女啪啪| 欧美第一黄网免费网站| 美女国产一区| 亚洲第一久久影院| 久久久精品一区二区三区| 久久久水蜜桃| 尤物在线观看一区| 久久久久天天天天| 欧美1区2区视频| 亚洲国产va精品久久久不卡综合| 久久久久久久91| 欧美日韩国产在线播放网站| 久色成人在线| 国产精品五区| 亚洲综合精品自拍| 久久超碰97人人做人人爱| 国产乱码精品1区2区3区| 亚洲无人区一区| 欧美专区日韩视频| 国产三级精品三级| 久久国产精品网站| 蜜桃伊人久久| 亚洲美女av网站| 欧美日韩精品免费观看视频完整| 亚洲美女黄网| 亚洲综合视频1区| 国产视频精品网| 久久综合九色九九| 亚洲国产日韩在线一区模特| 亚洲校园激情| 国产午夜精品全部视频播放| 久久久在线视频| 亚洲欧洲偷拍精品| 性做久久久久久久免费看| 激情成人亚洲| 欧美理论视频| 亚洲欧美在线免费观看| 免费观看久久久4p| 亚洲性视频h| 精品不卡在线| 国产精品h在线观看| 久久国产一区二区| 亚洲人成网站777色婷婷| 午夜精品999| 亚洲国产美女精品久久久久∴| 欧美经典一区二区| 亚洲欧美在线一区| 亚洲国产精品久久人人爱蜜臀| 午夜精品免费在线| 亚洲电影免费在线观看| 欧美特黄a级高清免费大片a级| 性18欧美另类| 亚洲精品国产视频| 久久精品在线| 亚洲一区二区免费| 亚洲成人在线| 国产女主播一区二区| 免费中文日韩| 久久精品一二三区| 亚洲少妇在线| 亚洲二区视频| 久久精品电影| 亚洲综合精品四区| 亚洲精品国产视频| 精品二区视频| 国产欧美亚洲视频| 欧美日韩午夜| 欧美精品自拍偷拍动漫精品| 久久久精品五月天| 香蕉久久国产| 亚洲视频第一页| 亚洲蜜桃精久久久久久久| 欧美激情久久久久久| 蜜桃伊人久久| 久久中文字幕一区| 欧美中文字幕在线播放| 亚洲影院免费| 亚洲一区二区三区午夜|