网上有很多关于这个主题的混乱,我很困惑。
每次我尝试从另一个类更改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。
答案 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/