2012-07-31 63 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