它可以是相當困難和複雜的事情,還是很容易的,它只是取決於你的解決方案應該多大的靈活性。您首先需要設計一個程序結構並解決問題。
我喜歡從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對象可能是個好主意,因爲您可以直觀地看到加載過程。