蓋莫遊戲引擎 GUI系統 布局管理器

2021-06-10 06:02:01 字數 1864 閱讀 1711

gui系統 布局管理器

1.布局管理器存在的理由:可以避免手動或者逐個調整控制項位置

2.布局管理器的基本功能:調整同一容器下同一層次下各個控制項的位置

3.布局管理器的基本介面:

a.控制項加入

b.控制項移除

c.控制項排列

4.布局管理器和控制項的關係

a.乙個布局管理器負責1個或則多個控制項的排列

b.具有控制項容器語義的控制項(例如面板)持有乙個布局管理器

5.合適呼叫布局管理之布局?

a.持有的控制項尺寸變化,移動或者使用者顯示的呼叫之時

6.可能的布局管理器型別

a>流式,**布局,盒子,複雜型別,...

7.簡單的布局管理器介面 /

/////

ui布局資訊基類///

class

uilayoutinfo

virtual

~uilayoutinfo(){}

public

:virtual

engine_string getlayoutttype()

const=0

;};///

///定義ui布局管理器基類///

class

uilayouter

virtual

~uilayouter(){}

public://

/////

增加乙個窗體到布局管理區

////

virtual

uilayouter

&addwidget(widget

*widget) =0

;virtual

uilayouter

&addwidget(widget

*widget,

const

uilayoutinfo&)

////

///控制項移除和重新排列

////    

virtual

uilayouter

&removewidget(widget

*widget) =0

;virtual

uilayouter

&arrange(widget

*parent) =0

;};

所有型別的布局管理器都需要繼承於uilayouter

其成員函式arrange負責調配parent控制項下的所有控制項單元.

需要說明的是當容器控制項加入乙個新的控制項的時候,其布局管理器就會呼叫addwidget負責把新的控制項加入布局管理器物件

舉乙個ui面板的例子:

///ui面板(容器)

class

g_dll_api panel : 

public

widget

panel

&addchildwidget(widget

*widget,

const

uilayoutinfo

&info)

////

///控制項移除

////

panel

&removechildwidget(widget

*widget)

////

///控制項排列

////

panel

&arrangechildren()

////

///載入布局管理器

////

panel

&setlayouter(uilayouter

*layouter);

在我設計的時候主要參考了2個gui庫,glooey,opengl gui lib

目前商業上使用的開源cegui過於複雜 比很多遊戲引擎都大 讓人難以容忍

使用蓋莫遊戲引擎2 1 1天空面渲染天空

使用蓋莫遊戲引擎2.1.1的天空面 使用蓋莫遊戲引擎2.1.1的天空面 這是使用蓋莫遊戲引擎2.1.1的天空面功能 很簡單的 先說天空面描述符 引入這 個的目的在於減少很多不相關的函式和 其中天空面引數有天空面分割數division 2 個半徑 面半徑和空間半徑 乙個天空圖形 4個關於旋轉的引數 下...

El遊戲引擎 5 GUI

5.guiel的 gui參考 cegui 乏善可陳。作者使用 cegui 也有一段時間了,這裡針對 cegui 做些討論,希望對大家有所幫助。cegui 效率低下的問題常常為人詬病,但是其整個 ui系統的設計卻是很出彩的。可喜的是,一般專案在對其進行簡單優化後,其效率即可基本達到應用需求,網上也有一...

遊戲引擎 GUI的設計與實現 序

在實現了幾個完整gui系統後,以前覺得很難的東西一下變得開朗了。比如以前想在ftk裡實現乙個 混排的控制項和樹形控制項,感覺複雜度超出我的能力範圍了,所以ftk沒有這樣的控制項。而在cantk裡實現乙個 混排的控制項只花了兩天時間,在wtk實現樹形控制項只花了一天時間。寫程式沒有什麼技巧,只是熟能生...