我有一个名为 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”。但是,请你帮我,我该怎么办呢?
我更喜欢将图层实例留在主类上(而不是将它们放在菜单类中),因为其他元素稍后会使用它们。 (除非我别无选择......)
谢谢!
答案 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);