从子类访问Document类上的变量

时间:2014-11-24 18:46:11

标签: actionscript-3 variables

网上有很多关于这个主题的混乱,我很困惑。

每次我尝试从另一个类更改Main.as上的变量时,它都会失败。 更糟糕的是什么?我记得过去在as3中这样做。

public var mainVar:String = "CHANGE ME"; //on Main.as

我尝试的事物类型:

MovieClip(root).mainVar = "changed"; //error #1009
parent.mainVar = "changed"; //error #1119
this.parent.mainVar = "changed"; //error #1119
Main..mainVar = "changed"; //error #1119

我尝试使用相同的语言调用函数并获得类似的结果。

提前感谢任何试图提供帮助的人。

有很多次,似乎最好的想法是将这些函数存储在类中,并且一旦调用它们就让它们在main.as变量上工作,但我永远找不到一个可靠的方法来做到这一点,并最终动态添加子项和设置事件侦听器,并仅使用main.as中的变量。很容易做到相反,从main.as更改存储在类中的var。

1 个答案:

答案 0 :(得分:0)

你的问题"是AS3是OOP,这意味着类分开工作,你需要连接它们。旧的"方式"这样做(使用root)在处理更大的项目时是绝对错误的。

有很多方法可以在类之间建立连接。首先,您的Main类的行为类似于root(如果通过Flash IDE中的Properties定义为基类)。因此,如果您创建一个DisplayObject添加的类到主类(使用addChild();),那么您将能够做到很像以前:

MovieClip(parent).myFunction();

我不建议这样做,而是更可靠的解决方案 - 将主类传递给必须使用它的类:

var somethingCustom:MyClass = new MyClass(this); // inside Main.as

然后在你新创建的类中将它保存为变量并从中调用函数:

var _root:DisplayObject;
public function MyClass(root:DisplayObject) { // MyClass.as
    _root = root;
    _root.callPublicFunction();
}

有许多资源可以帮助您理解课程(这样说是因为这是他们应该工作的正常方式):

How Actionscript 3 Classes Work

http://www.untoldentertainment.com/blog/2009/08/25/tutorial-understanding-classes-in-as3-part-1/