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

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

偶爾來避難的地方~

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

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

【sprite系統】

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

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

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

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

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

【UI元素】

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

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

每個UI元素上都有數個事件的插槽,應用程序可以通過向這些插槽插入事件處理來關注UI元素。

【UI腳本】

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

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

【引擎接口】

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

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

【資源管理】

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

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

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

【文字繪制】

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


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

【關于繪圖系統】

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

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

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


【數據源】

UI系統里,每個UI元素都是從數據源中進行讀取并創建的。

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

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

【UI編輯器】

相應的,生成數據源的部分,就是靠UI編輯器。

UI編輯器本身也是通過UI系統實現的。

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


【歷史】

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

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

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

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

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

評論

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

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

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

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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在线热播精品免费| 亚洲高清视频的网址| 乱人伦精品视频在线观看| 久久免费黄色| 欧美韩国在线| 99在线观看免费视频精品观看| 亚洲人成在线播放| 99精品欧美一区| 午夜视频久久久| 欧美sm视频| 欧美性天天影院| 国产日韩欧美黄色| 亚洲国产欧美一区| 小处雏高清一区二区三区| 久久久久久一区二区三区| 亚洲成色www久久网站| 日韩一区二区精品| 久久久久久久欧美精品| 欧美日韩中文| 黄色日韩网站| 亚洲一区二区不卡免费| 久久香蕉国产线看观看av| 亚洲人成在线播放| 久久精品一区二区三区中文字幕| 欧美激情免费观看| 美女久久网站| 亚洲一区二区三区久久| 久久久久国产精品厨房| 亚洲精品一区在线| 久久久亚洲国产天美传媒修理工 | 久久久久久久综合色一本| 欧美日韩国产色综合一二三四| 国产农村妇女精品| 亚洲视频电影在线| 欧美国产日韩一区二区在线观看 | 欧美日韩视频不卡| 亚洲第一精品久久忘忧草社区| 亚洲免费网站| 亚洲精品字幕| 欧美国产视频日韩| 亚洲国产老妈| 欧美大片免费观看| 久久久欧美一区二区| 国产精品一区一区三区| 亚洲欧美国产高清| 一区二区国产精品| 欧美午夜国产| 亚洲影院色在线观看免费| 亚洲久久一区| 欧美视频免费在线| 在线中文字幕一区| 一本大道久久精品懂色aⅴ| 欧美啪啪一区| 中文一区字幕| 国产精品99久久久久久久女警 | 国产欧美亚洲日本| 亚洲欧美日韩国产成人| 亚洲免费久久| 欧美日韩亚洲一区二区三区| 亚洲精品午夜精品| 亚洲精品孕妇| 国产精品欧美经典| 校园激情久久| 欧美一区二区三区免费观看视频| 国产日韩在线播放| 久久久999国产| 久久久蜜臀国产一区二区| 在线观看亚洲一区| 亚洲电影免费观看高清完整版在线观看| 蜜桃av综合| 中文精品99久久国产香蕉| 9人人澡人人爽人人精品| 国产精品第2页| 久久国产视频网| 老鸭窝毛片一区二区三区| 亚洲精选成人| 亚洲淫片在线视频| 亚洲精品乱码久久久久久蜜桃91 | 欧美在线观看一区二区| 亚洲欧美日韩久久精品 | 亚洲欧美资源在线| 欧美伊人久久| 亚洲欧洲精品天堂一级| 亚洲激情电影在线| 国产精品麻豆成人av电影艾秋| 久久岛国电影| 免费成人性网站| 亚洲女人av| 久久综合伊人77777麻豆| 亚洲最新合集| 久久国产毛片| 一区二区三区国产精品| 午夜视频一区二区| 亚洲精品一区在线观看香蕉| 亚洲一区二区三区精品动漫| 亚洲成在线观看| 一个色综合导航| 在线看欧美视频| 亚洲少妇自拍| 日韩视频在线观看国产| 欧美一区二区视频免费观看| avtt综合网| 久久免费高清视频| 欧美一区二区三区免费在线看| 免费看黄裸体一级大秀欧美| 欧美伊久线香蕉线新在线| 欧美国产亚洲另类动漫| 久久视频一区二区| 国产精品美女www爽爽爽视频| 欧美α欧美αv大片| 欧美午夜在线| 日韩视频中午一区| 亚洲精品一区二区三区蜜桃久| 午夜精品久久| 午夜日韩在线| 国产精品免费一区二区三区在线观看 | 在线观看亚洲视频啊啊啊啊| 亚洲美女毛片| 亚洲毛片在线| 男人的天堂亚洲| 久久久亚洲欧洲日产国码αv| 国产精品v亚洲精品v日韩精品| 亚洲高清不卡av| 亚洲福利视频三区| 久久久xxx| 毛片一区二区三区| 老司机一区二区| 久久国产夜色精品鲁鲁99| 欧美日韩网站| 日韩视频久久| 这里是久久伊人| 欧美性淫爽ww久久久久无| 国产欧美日韩亚州综合| 午夜精品久久久久| 亚洲人成网站精品片在线观看 | 国产亚洲一区二区在线观看| 亚洲私人影院在线观看| 亚洲综合导航| 国产精品亚洲网站| 亚洲综合日韩在线| 久久国产日本精品| 狠狠色狠色综合曰曰| 久久久xxx| 亚洲第一精品夜夜躁人人爽| 亚洲国产精品嫩草影院| 欧美不卡视频一区发布| 亚洲精品自在在线观看| 亚洲免费视频中文字幕| 国产精品美女久久久免费| 亚洲欧美中文字幕| 欧美jjzz| 在线亚洲国产精品网站| 欧美午夜精品久久久久久孕妇| 中日韩美女免费视频网址在线观看 | 欧美一区二区观看视频| 久久综合网hezyo| 亚洲人成欧美中文字幕| 欧美日韩在线精品一区二区三区| 亚洲午夜激情| 欧美成人伊人久久综合网| 夜夜精品视频一区二区| 国产精品一区二区三区四区五区| 久久av资源网站| 亚洲精品日韩在线| 久久精品欧美日韩精品| 亚洲老板91色精品久久| 国产精品亚洲不卡a| 麻豆视频一区二区| 亚洲婷婷在线| 亚洲国产精品成人va在线观看| 亚洲在线视频网站| 一区三区视频| 国产精品久久久久aaaa九色| 久久国产手机看片| 一本色道久久综合亚洲精品不卡| 久久精品国产清高在天天线| 日韩午夜中文字幕| 韩国亚洲精品| 国产精品国产三级国产普通话蜜臀 | 亚洲免费观看| 国产亚洲成av人在线观看导航| 欧美成人资源| 久久久久久婷| 亚洲欧美日韩在线不卡| 亚洲美女视频| 欧美激情综合| 老司机久久99久久精品播放免费| 亚洲一区二区三区中文字幕| 亚洲国产精品va在线观看黑人| 国产欧美一区二区精品性色| 欧美日韩在线播放一区| 欧美a级大片| 久久久夜夜夜| 欧美大片免费久久精品三p | 亚洲国产精品一区二区第一页| 午夜欧美理论片| 中国成人黄色视屏| 亚洲精品美女久久久久|