0

我有一个名为mc_menu的库对象,并附加了一个类代码。班级在舞台上建立一个菜单并将 MC 放在舞台上(并通过单击菜单来替换它们)。我正在尝试调用从父类放置在舞台上的对象,但我找不到正确的方法。

主代码位于 main.因为这是代码的重要部分:

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 层精灵供以后使用。菜单应该放在顶层(因为它成功),并且只要其他对象将放在底层内,项目本身的 MCs 就可以了。

那么问题就是这样。我试图告诉 menuClass 调用底层,但我找不到正确引用它的方法。

这是代码部分:mcMenu.as

public class mc_Menu extends MovieClip {

        public function mc_Menu() {

        }


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

我知道这不能这样做,因为在类范围内它不知道“bottomLayer”。但你能帮我怎么做吗?

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

谢谢!

4

1 回答 1

0

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

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

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

编辑

在考虑了一秒钟之后,另一个选择是在创建时将 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);
于 2012-07-31T17:33:18.023 回答