2012-07-31 43 views
0

我有稱爲mc_menu庫對象,附加有類代碼。該班級在舞臺上製作一個菜單,並將MC放在舞臺上(並通過點擊菜單替換它們)。 我想調用一個放在舞臺上的父類的對象,但我找不到正確的方法。參照兄弟對象

的主要代碼坐在main.as 這是代碼的重要組成部分:

public class main extends MovieClip { 
     public function main() { 


      //add container layers 
      addChild(bottomLayer); 
      addChild(topLayer); 


      topLayer.addChild(menuInst); 
      menuInst.init(); 

} 

    public var menuInst= new mc_Menu;    
    public var topLayer:Sprite = new Sprite(); 
    public var bottomLayer:Sprite = new Sprite(); 

正如你看到的,我prepearing 2層,供以後使用的主舞臺的精靈。 只要其他物體放置在底層內部,菜單應該放在頂層(如果它成功)和物品本身的MC。

好,問題就是這樣。我試圖告訴menuClass調用底層,我無法找到一種方法來正確引用它。

這是部分代碼: mcMenu.as

public class mc_Menu extends MovieClip { 

     public function mc_Menu() { 

     } 


public function init():void{  
     bottomLayer.addChild(masterChapter); 
} 

我知道這不能做這種方式,因爲裏面的類的範圍內,它不知道「bottomLayer」。但你能幫我嗎我該怎麼做對嗎?

我更喜歡在主類上留下圖層實例(而不是將它們放在菜單類中),因爲其他元素稍後會使用它們。 (除非我別無選擇......)

謝謝!

回答

0

您可以通過mc_Menu實例的父引用bottomLayer,這是一個壞主意的唯一原因是,如果你打算重新使用mc_Menu,它會有不同的父母。在編程方面的課程將緊密耦合,但是這將是一個快速和骯髒的解決方案:

public function init():void{  
     parent.parent.bottomLayer.addChild(masterChapter); 
} 

更好的選擇是使用一個「單身」模式或某種依賴注入的MVC或MVVM框架類似機器人的腿或SpringAS或其他可以在main和你的子元素之外聲明這些實例並將值/實例注入到這兩者中的其他東西。

編輯

通過思考這個一秒鐘後,另一種選擇是,當你創建喜歡bottomLayer的情況下通入mc_Menu:

public class mc_Menu extends MovieClip { 
    private var _bottomLayerHandle:Sprite; 
    public function mc_Menu(bottomLayer:Sprite) 
    { 
     _bottomLayerHandle = bottomLayer; 
    } 
    public function init():void{  
     _bottomLayerHandle.addChild(masterChapter); 
    } 
} 

只是創造他們的時候。然後重新安排讓Sprite成爲第一個:

public var bottomLayer:Sprite = new Sprite(); 
public var topLayer:Sprite = new Sprite(); 
public var menuInst= new mc_Menu(bottomLayer); 
+0

謝謝!爲什麼我不認爲它需要走兩步(parent.parent),但只有一步,這就是爲什麼父母。沒有爲我工作... – 2012-08-01 05:40:22