2012-08-22 106 views
0

某人將如何編寫「窗口」?我開始製作一個GUI,我想學習如何編寫一個。一個可以換膚,一個實際上在運行時循環並創建它自己。我知道這可能有點模糊,所以我會添加細節。圖形用戶界面窗口代碼

一個實際上「創造」自己。我看過的大多數GUI教程都依賴於剛添加到屏幕上的'圖像'。我想能夠在我的窗戶中使用皮膚。我的'皮膚'只是一個'邊界'的集合。然後當我插入window.create(50,50)其中50,50是我的身高,寬度時,它只會在皮膚之後創建該窗口。

我明白,它可能跟語言繪製矩形時一樣,它只是遵循一組不同的規則(也許?)。然而,對於我所有的Google-fu技能,我都找不到教我這個教程。

請幫忙。我沒有包括你使用的語言,因爲我相信我只需要知道如何創建一個。無論如何,我正在使用ActionScript 3.一個教程會很好,甚至是一個單一的類,這個功能,我只是研究代碼。或者如果你知道一個,也許是一本關於GUI和編程的書:D

回答

1

純粹的As3.0 GUI編碼相當麻煩。我嘗試谷歌搜索,但沒有出來。無論如何,對於我的情況,我使用SWC生成,並且類映射和定製。但我不確定最好的方法。以其他方式我使用bit101庫。這是給我想要窗口,圖表,組件容易高度抽象。看到下面的圖片。

enter image description here

0

它可以是相當困難和複雜的事情,還是很容易的,它只是取決於你的解決方案應該多大的靈活性。您首先需要設計一個程序結構並解決問題。

我喜歡從API的角度來看它的外觀。我想我會創建一個像這樣的GUI元素:

var wholeGui:MyGUI = new MyGUI(); 
var window:IGuiElement = new GuiWindow(dataObject, skinObject); 
wholeGui.addElement(window); 

那麼你需要什麼?

1)將管理所有GUI元素的對象。爲什麼?僅僅因爲你的GUI元素不應該被自己銷燬,如果用戶點擊你的小窗口上的「X」。整個Gui對象會管理它們,並聽取任何事件,包括會摧毀它們的事件。如果交互過程複雜,您可以考慮爲整個GUI對象和窗口對象之間的交互創建自定義事件。

2)GUI對象的接口。這裏的一個問題是,AS3實際上沒有Sprite的接口,並且你希望像使用擴展的Sprite一樣與它交互。這裏的解決方法是在這個界面有一個像這樣的聲明:

function asSprite():Sprite; 

而且在GuiWindow您的實現應該是這樣的:

public function asSprite():Sprite { 
    return this; 
} 

和你GuiWindow類應該擴展當然雪碧。然後你可以通過編寫例如window.asSprite來訪問它的Sprite屬性和方法。的startDrag();

這個接口應該給你你需要在你的GUI元素上操作的能力。

3)GUI元素的類,在本例中爲GuiWindow。

4)您的數據將被注入到您的元素的類。如果您要動態加載數據,並且從某個位置加載數據,那麼在無法提供數據時,您需要處理這種情況 - 但該邏輯將位於您的窗口內。

5)你的皮膚類 - 所以你將能夠動態地創建一個皮膚對象,並用它來創建你想要的窗口。

這只是幾個想法考慮。

PS。在創建它之後使用數據填充GuiWindow對象,而不是在構造函數中填充GuiWindow對象可能是個好主意,因爲您可以直觀地看到加載過程。