2012-03-19 23 views
4

基本上,我無法找到任何好的文章來開發自己的GUI,,它們處理良好實踐,基本結構,事件冒泡,提示並避免所有常見陷阱。我對如何在5分鐘內構建一些概念驗證圖形用戶界面並不感興趣,也沒有興趣構建下一個未來的GUI。用於開發GUI庫的文章

目的是建立一個合理的圖形用戶界面用於遊戲工具,但它們將存在於遊戲內部,因此我不想使用現有的大型GUI,我發現大多數遊戲GUI爲我所需要的而臃腫。我喜歡自己做這件事的經歷。

我已經在過去做過很好的圖形用戶界面,但是,由於一些不好的設計決策和經驗不足,它只能做很多事情(並且建立在Flash中,所以它獲得了很多東西自由)。所以我想真正理解這次的基礎知識。

回答

1

的一些技巧 -

1)挑選你的風格的用戶界面將工作 - 會是無狀態的?如果是的話,你將如何適當地處理這些事件?如果它是無狀態的,你可能需要重新評估你的UI用戶代碼兩次,以便從用戶端獲得最新的事件更改。如果你的用戶界面存儲狀態,那麼你將不必關心處理事件,但它會限制你的用戶界面,當涉及到快速突變和重建。 2)不要太依賴面向對象,虛擬方法不是世界上最快的事情,所以要謹慎使用它們;雖然有某種基於繼承的結構可能會有所幫助。如果使用對象,請注意dynamic_cast和RTTI;他們會讓你放慢腳步。相反,爲每個控件類設置一個枚舉,get_type()方法,並對可轉換性進行手動檢查。

3)嘗試分離外觀和UI邏輯/佈局。 4)如果你想要動態的窗口,佈局等,那麼你將不得不處理對齊,夾緊,位置等及其更新。如果你只需要靜態定位的小部件,它會使它更容易。

5)不要過度設計,你不會從中受益。

我沒有告訴過你,也許有一些具體的問題會有所幫助?

+0

謝謝!這將在Lua中實現,其想法是保留它,即時模式對於「更扁平」和更簡單的GUI來說似乎很棒。我正在尋找的主要是剛纔,基本知識應該是什麼樣子?如何做事件傳播的權利(鼠標點擊,輸入焦點等),推薦的基類方法,如何處理兒童和定位(像一個按鈕中的標籤)和類似的東西。 – Andreas 2012-03-19 22:55:36

+0

我認爲在Cube 2遊戲引擎中查看UI代碼可能很有用。這不是很好的代碼,但它實現了非常優雅的無狀態UI,代碼量最小,基本上沒有OO,只是使用代理和雙重評估(當無狀態時你無能爲力)。無狀態絕對是一個不錯的主意。但是,對UI進行重新評估和重建並不能完全彌補性能的提升,因此對於複雜的UI結構,您最好使用基於狀態的系統。 – q66 2012-03-19 22:59:20

0

查看現有GUI庫的文檔。這應該會爲您提供經過驗證的設計的詳細信息,以處理您遇到的問題。

你可能想從一個你熟悉的人開始,但我認爲設計得很好的人是AppKit。它的API是Obj-C,所以如果你想複製它,需要做一些調整,但是文檔給出了關於對象如何相互作用的各種細節。處理事件以及佈局約束如何工作,這應該直接適用於設計大多數任何語言的OO GUI。

+0

是的,我正在查看一些現有的GUI庫,但除非您已經熟悉它們,否則確實瞭解它們如何在這樣的低級別工作是相當複雜的任務。目前正在研究GWEN,這與我之後的事情有些類似,但仍然不容易掌握髮生的事情。 – Andreas 2012-03-20 09:15:35