2014-02-06 27 views
0

這與我剛剛問到的similar question有關;然而,這是專門爲我的個人項目量身定做的,而不是一般的面向對象編程。優點和缺點爲GUI創建一個單獨的類(在actionscript中)

我正在編寫一些有趣的編程曲折的hang子手版本。由於遊戲的邏輯已經完成,我不需要詳細描述它們是什麼。我可以通過爲用戶輸入硬編碼變量來運行整個遊戲(如猜測選擇)。我現在正在替換所有那些需要用戶與真實遊戲(比如按鈕,圖像,聲音等等)的交互作用的那些比特的過程。

我想弄清楚是不是所有這些都更好東西是我主要課程的一部分,還是我應該創建另一個課程來處理這一切。例如,我希望我的玩家能夠點擊屏幕上的鍵盤進行猜測,每個按鈕觸發一個單獨的事件偵聽器調用makeGuess函數。將按鈕創建爲我的主遊戲類的直接子對象會更好嗎?還是應該創建一個子類(例如,稱爲鍵盤),以創建適當事件的棋盤的鍵盤部分,然後將鍵盤類添加爲孩子主要而不是所有的東西?每種選擇有哪些優缺點?

爲了記錄,我使用FlashDevelop進行編程,所以對我來說沒有任何時間線。

回答

0

我說你最好創建至少Keyboard類,將解析由攻/點擊裏面鍵觸發的事件,並給它一個回調引用您Main類或GameLogic類,所以它可以做theMain.guess(letter);然後類邏輯將生效並處理回調。由於這種結構與遊戲邏輯並不完全相關,因此在技術上它可以通過實現回調接口來重複使用,以便您可以在其他地方使用此鍵盤,以便讓玩家使用鼠標鍵入字母,最好是與主邏輯分離。

public class Keyboard extends Sprite { 
    public var callback:AcceptingKeys; // an interface 
    ... // class implementation, with all the listeners, children and stuff 
    // and you call in there: callback.acceptKey(key); 
} 
public interface AcceptingKeys { 
    public function acceptKey(key:String):void; // or whatever type you need 
} 

你用你的Main類做:

public class Main extends Sprite 
implements AcceptingKeys { 
    ... 
    var keyboard:Keyboard; 
    private function init(e:Event=null):void { 
     ... // other code. It's FD, then this function exists 
     keyboard=new Keyboard(); 
     keyboard.callback=this; 
     // past this point your instances can talk 
    } 
    public function acceptKey(key:String):void { 
     // match interface description 
     ... // do game logic for parsing a key 
    } 
}