2013-10-10 72 views
0

我現在使用starling框架在flash中做遊戲。不過,我對遊戲中的體系結構不熟悉,我認爲我在遊戲中所做的並不是很好。AS3遊戲架構

我有一個Screen類,用於顯示舞臺上的內容。

public class Screen { 
    private var button : Button 
    private var controller : Controller 

    public function Screen(){ 
     controller = new Controller(button) 
    } 
} 

public class Button{ 
    private var controller : Controller 
    private var button: Button 

    public function Button(){ 
     button.addEventListener(Event.TRIGGERED, onTrigger) 
    } 

    private function onTrigger(e:Event){ 
     controller.notify(buttonTriggered); 
    } 
} 
//in the controller class, I have a list of controller which controls other components 
//those are added to Screen class (character, ...) 
public class Controller{ 
    public function Controller(button){ 

    } 

    public function notify(event){ 
     switch(event){ 
     //notify to other controller with this event 
     } 
    } 
} 

您對此架構有任何建議。非常感謝您的所有反饋。

+0

記得在你的函數參數中包含你期待的類型。 例如: 公共功能控制器(按鈕:按鈕){... 關於體系結構它真的取決於你想要做什麼 – andygoestohollywood

+0

我想要做的是創建一個控制器的列表,將控制屏幕上的每個組件(如按鈕,英雄等等等等)。所有將在Controller類中。 Controller類將像發佈者一樣,只要發生事件,它就會將事件發佈到需要事件的每個組件控制器 – themyth92

回答

0

關於你的按鈕類,我假設你想要一個可以用鼠標點擊的按鈕。如果是這種情況,您應該將Event.TRIGGERED更改爲MouseEvent.CLICK,並將onTrigger中的e:Event參數更改爲e:MouseEvent。然後,只要您點擊按鈕,該功能就會觸發。

+0

因爲我使用starling框架,所以沒有MouseEvent,所以我使用觸發器事件。謝謝你的回答,但我想問的是這些類的結構,就像當我按下按鈕時,事件將傳遞給控制器​​,控制器將傳遞給所有監聽事件的組件控制器。然後這些控制器將更新組件的皮膚,文本等... – themyth92

1

我爲gazman-sdk.com中的屏幕創建了一個很好的解決方案。

當你想想看屏幕的機制是什麼它的主要任務是:

  • 管理一個屏幕疊加
  • 告知與棧變化的屏幕:
    • 呼叫on resume當屏幕越來越來的頂部堆棧
    • 打電話on pause屏幕不再位於堆棧頂部
    • 並致電屏幕創建時爲,當屏幕被破壞時爲dispose
  • 此外,你想封裝在屏幕內部的屏幕邏輯一些如何。所以你的代碼不會有這樣的行:opneScreen(new GameScreen());。因爲調用這個方法的班級知道誰是誰,你想避免這種情況。
  • 最後,當您的屏幕機制啓動並運行時,您不想爲彈出窗口編寫另一個相同的機制,因爲它幾乎相同。

我使用Multiton pattern構建了一個解決方案,它具有用於彈出屏幕和屏幕的屏幕堆棧模型的多重表示。每個屏幕都是封裝的,並通過監聽系統事件來啓動和關閉。

不幸的是,我還沒有創建完整的教程。當我這樣做,它將被公佈here。我在Component Explorer項目中做過這種機制的運行示例。您可以在github上找到它的源代碼。現場示例here

我一直活躍在本網站,所以如果您選擇在您的項目中實施它,我可以幫助您解決任何問題。

乾杯和祝你好運。