2011-03-20 125 views
2

對我的previous問題的後續處理。AS3類/基類構造函數

我在舞臺上有一個按鈕,它有一個名爲Game1的類(我沒有定義這個類,只是像Juan回答我的其他問題那樣鏈接它)。該按鈕有'GameButton'作爲基類,它目前包含一些簡單的x,y語句。

我的所有按鈕都有一個虛擬類「GameX」和一個GameButton基類;這樣他們從基類繼承,但他們仍然可以有不同的圖形。

我有一個包含代碼中添加此按鈕,主類:

public class MainAteam extends MovieClip 
{ 
    public var btn1:Game1; 

    public function MainAteam() 
    { 
     btn1 = new Game1(); 
     addChild(btn1); 
     btn1.addEventListener(MouseEvent.CLICK, startGame1); 
    } 
    // startGame 1 function here 
} 

現在,我希望能夠通過參數來給X,Y值,這樣我就可以放置在不同的點每個按鈕。然而,當我嘗試新的遊戲(5,5),我把在遊戲對象的構造函數如下:

package 
{ 
import flash.display.SimpleButton; 

public class GameButton extends SimpleButton 
{ 
    public function GameButton(startX:Number, startY:Number) 
    { 
     x = startX; 
     y = startY; 
    } 
    } 
} 

我得到以下錯誤:

1203: No default constructor found in base class GameButton

我真的不知道如何解決這個問題,因爲我讓Flash爲我定義了GameX類(我想他們只是空的)並使用基類來設置一些屬性。如果我只是把x=5; y=5,它工作正常。非常感謝。

回答

3

這是兩件事情之一,要麼你需要調用super();從你的構造函數中,或者你沒有在初始化時實現所需的類屬性/方法。嘗試擴展Button,而不是SimpleButton,看看它是否適合你。

編輯 我的第一個答案是正確的軌道,但仍然是錯誤的。問題是你正在創建你的Game1,Game2等類,而不是調用GameButton類的構造函數。當你擴展一個具有REQUIRED構造函數參數的類時,你必須使用super()來提供它們。所以在這種情況下,您的Game1類的構造函數中需要調用:

super(positionX, positionY); 

OR

您可以通過修改GameButton構造有默認值,就像這樣:

public function GameButton(var x:int = 0, var y:int = 0) 

萬一你不知道,super()只是一種訪問基類的構造函數的方法,它也可以稱爲超類,這就是爲什麼該方法被稱爲super :)。希望這可以幫助。

ALSO

同時請注意,如果你正在創建這些的Game1,GAME2類等從Flash IDE內(庫),那麼你將需要去添加默認的路由當Flash自動爲庫對象生成類時,它們將作爲GameButton構造函數的值。或者,您仍然可以在預編譯的庫剪輯中創建圖形,而不是在Export For Actionscript設置中定義類+基類,而是像手動創建GameButton一樣手動創建實際的Game1/Game2等類,然後在Export For Actionscript區域放置完整的合格類名稱。像這樣:

enter image description here

+0

我做了什麼,現在是把btn1.x =,= btn1.y在我的主類(我的遊戲類),但我不知道這是很好的做法。我寧願將它發送給構造函數的參數。我看到的問題是,我讓Flash生成了我實際上沒有使用的Game1,Game2類。我不能把超();那裏(我想它會去那裏)。還在迷茫:( – cabaret 2011-03-20 21:22:42

+1

我剛剛更新了我的答案几次笑來解釋這一切。再問題隨時問。 – 2011-03-20 21:25:13

+1

是的,我貼得更NFO有關在這種情況下該怎麼做,也說明它是如何工作/這是什麼意思。你有2個選項(有更多的但是保持簡單),基本上自己創建和使用這些類(手工編碼),或者將默認值添加到超類構造函數中 – 2011-03-20 21:26:31