提到兄弟对象

时间:2012-07-31 17:08:16

标签: actionscript-3 class

我有一个名为 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();

如你所见,我在主舞台上预制了2层精灵供以后使用。 菜单应该放在顶层(因为它成功),并且只要其他对象放在底层内,项目的MC就会自己。

问题就是这样。我试图告诉menuClass调用底层,我找不到一种方法来正确地引用它。

这是代码部分: mcMenu.as

public class mc_Menu extends MovieClip {

        public function mc_Menu() {

        }


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

我知道这不可能这样做,因为在类范围内它不知道“bottomLayer”。但是,请你帮我,我该怎么办呢?

我更喜欢将图层实例留在主类上(而不是将它们放在菜单类中),因为其他元素稍后会使用它们。 (除非我别无选择......)

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以通过mc_Menu实例的父级引用bottomLayer,这是一个坏主意的唯一原因是,如果您计划重新使用mc_Menu并且它将具有不同的父级。在编程术语中,类将紧密耦合,但这将是一个快速而肮脏的解决方案:

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

更好的选择是使用“Singleton”模式或某种依赖注入MVC​​或MVVM框架,如机器人腿或SpringAS或其他您可以在main和子元素之外声明实例并具有值的其他内容/ instance注入两者。

修改

经过一段时间的思考后,另一个选择是在创建它时将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);