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

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

偶爾來(lái)避難的地方~

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

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

【sprite系統(tǒng)】

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

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

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

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

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

【UI元素】

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

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

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

【UI腳本】

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

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

【引擎接口】

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

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

【資源管理】

因?yàn)閁I系統(tǒng)中會(huì)涉及到比較多資源,所以,所有資源都被統(tǒng)一管理起來(lái)。通過(guò)字符串來(lái)進(jìn)行資源索引。返回的是資源的接口指針。

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

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

【文字繪制】

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


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

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

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

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

DX和OGL,因?yàn)檫@兩個(gè)都可以支持貼圖,所以實(shí)現(xiàn)UI系統(tǒng)需要的接口完全沒(méi)有問(wèn)題。在實(shí)際GUI的編碼和測(cè)試中,我使用HGE這個(gè)DX的封裝接口來(lái)間接實(shí)現(xiàn)了UI系統(tǒng)所需的繪圖接口。


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

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

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

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

【UI編輯器】

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

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

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


【歷史】

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

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

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

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

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

評(píng)論

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

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

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

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲欧美日韩网| 夜夜爽99久久国产综合精品女不卡| 亚洲免费视频网站| 亚洲天堂av图片| 国产欧美日韩另类视频免费观看| 久久精品国产亚洲高清剧情介绍 | 亚洲精品国产精品国自产观看| 欧美成人亚洲成人| 欧美日韩一级大片网址| 亚洲专区在线视频| 欧美一区二区观看视频| 亚洲春色另类小说| 9色精品在线| 国产一区在线看| 亚洲人成在线观看网站高清| 欧美日韩伦理在线免费| 久久超碰97人人做人人爱| 黑人操亚洲美女惩罚| 99re66热这里只有精品4| 亚洲午夜精品一区二区| 国产一区深夜福利| 亚洲欧洲日本在线| 国产日韩视频| 最新亚洲一区| 国产亚洲精品高潮| 亚洲精品久久视频| 国产一区二区福利| 日韩小视频在线观看专区| 国产婷婷色一区二区三区四区| 欧美大片一区二区三区| 国产精品每日更新| 91久久国产综合久久| 国产亚洲成av人片在线观看桃| 亚洲国产岛国毛片在线| 国产精品激情| 亚洲精品日韩欧美| 一区三区视频| 亚洲小说欧美另类婷婷| 亚洲精品乱码久久久久久久久| 亚洲免费影视第一页| 一本在线高清不卡dvd| 久久综合中文| 久久一二三国产| 国产精品久久激情| 一本一本a久久| 亚洲精品国产精品国产自| 久久福利视频导航| 欧美在线free| 国产精品亚洲欧美| 一区二区免费在线播放| 99在线精品免费视频九九视| 免费视频一区| 免费不卡在线观看| 一区二区三区在线视频播放| 亚洲在线播放电影| 性欧美xxxx视频在线观看| 欧美日韩一区二区三区四区五区 | 欧美一区亚洲二区| 麻豆91精品| 欧美va天堂| 在线看片成人| 久久久久久自在自线| 久久久女女女女999久久| 国产永久精品大片wwwapp| 午夜精品久久久久久99热| 亚洲欧美卡通另类91av| 欧美性感一类影片在线播放| 99热这里只有精品8| 亚洲天堂av高清| 欧美偷拍一区二区| 亚洲伊人一本大道中文字幕| 亚洲欧美视频在线观看| 国产精品第十页| 亚洲一区区二区| 麻豆成人在线观看| 狠狠色丁香婷综合久久| 午夜精品久久久99热福利| 午夜激情一区| 日韩视频一区二区三区在线播放免费观看 | 亚洲欧洲日本专区| 欧美mv日韩mv国产网站| 欧美激情一区三区| 日韩视频免费| 国产精品久久久久国产a级| 亚洲与欧洲av电影| 久久夜色精品国产噜噜av| 一区二区在线观看视频| 欧美国产视频在线观看| 一区二区三区精密机械公司 | 欧美一级在线亚洲天堂| 国产欧美日韩视频| 久久久最新网址| 亚洲欧洲综合| 小处雏高清一区二区三区| 国产自产高清不卡| 欧美高清视频一区| 亚洲伊人网站| 亚洲第一福利在线观看| 亚洲制服少妇| 亚洲国产精品成人久久综合一区| 欧美日本中文| 欧美在线日韩精品| 一区二区免费看| 女仆av观看一区| 午夜精品国产更新| 亚洲日韩视频| 韩国精品在线观看| 欧美日韩一区二区三区免费| 久久久久高清| 亚洲男女自偷自拍图片另类| 在线视频欧美精品| 久久久伊人欧美| 一区二区91| 在线精品国精品国产尤物884a| 欧美日韩在线大尺度| 美女91精品| 欧美在线免费看| 亚洲一区二区三| 亚洲人成网站999久久久综合| 久久午夜电影网| 欧美亚洲综合另类| 亚洲伊人网站| 日韩视频一区二区三区| 亚洲国产精品一区| 国产原创一区二区| 国产麻豆成人精品| 国产精品护士白丝一区av| 欧美精品v日韩精品v韩国精品v | 一区二区三区色| 亚洲国内自拍| 欧美chengren| 欧美精品二区| 久久婷婷国产综合尤物精品 | 午夜欧美视频| 噜噜爱69成人精品| 亚洲第一主播视频| 在线播放不卡| 激情国产一区| 伊人夜夜躁av伊人久久| 国产在线欧美日韩| 国产在线国偷精品产拍免费yy| 国产精品综合视频| 国产精品一卡二卡| 国产日韩高清一区二区三区在线| 国产精品成人免费精品自在线观看| 欧美美女日韩| 欧美亚男人的天堂| 国产伦精品一区二区三区视频孕妇| 国产精品国产亚洲精品看不卡15| 欧美午夜久久久| 国产精品久久久久9999| 国产女优一区| 狠狠色综合网| 亚洲永久精品大片| 亚洲无亚洲人成网站77777 | 国产精品久久久久久久久久尿| 国产精品国产| 国产伦精品一区二区三区高清版| 国产欧美日韩一区二区三区在线| 国产日本欧洲亚洲| 亚洲电影欧美电影有声小说| 亚洲精品老司机| 亚洲男同1069视频| 久久视频精品在线| 亚洲高清一区二区三区| 日韩一区二区精品视频| 午夜欧美大尺度福利影院在线看 | 一本色道久久综合狠狠躁篇的优点 | 亚洲视频免费在线| 欧美一区二区精品在线| 巨乳诱惑日韩免费av| 亚洲欧洲三级| 亚洲欧美中日韩| 美国十次成人| 国产精品一卡| 亚洲青涩在线| 欧美在线网站| 亚洲国产一区二区视频| 亚洲影音先锋| 欧美激情精品久久久久久黑人| 国产精品护士白丝一区av| 伊人久久久大香线蕉综合直播| 9久草视频在线视频精品| 欧美影视一区| 亚洲精品欧美一区二区三区| 香蕉久久夜色精品国产| 欧美—级在线免费片| 国产午夜精品一区二区三区欧美 | 亚洲日本免费电影| 久久都是精品| 一本色道久久99精品综合| 久久阴道视频| 国产欧美韩国高清| 99热精品在线| 美女视频网站黄色亚洲| 午夜在线一区| 国产精品久久久对白| 一本色道久久综合狠狠躁篇怎么玩| 久久亚洲高清| 欧美一区二区黄|