2014-11-24 32 views
0

关于这个主题,网上有很多混淆,我是困惑的。在子类中访问文档类的变量

每当我尝试将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 vars被调用后工作,但我永远无法找到一个可靠的方法来做到这一点,并最终添加孩子并动态设置事件监听器,并且只使用main.asp中的变量。做相反的事情很简单,从main.as中更改存储在类中的var。

+0

你可以把它的静态,公共静态var mainVar:String =“更改我”;然后使用Main.mainVar =“changed”; – Karmacon 2014-11-24 18:55:22

+0

你只需要正确地转换它,以便编译器知道什么类型的对象。 'MovieClip'(你当前的根目录)没有这些属性。但是'Main(root).mainVar'应该可以工作 – BadFeelingAboutThis 2014-11-24 18:58:37

+0

将其更改为静态工作。谢谢。 – randyHurd 2014-11-24 19:23:16

回答

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/

+0

这并不适用于我,但我会查看您的链接以查看正在发生的事情。谢谢。 – randyHurd 2014-11-24 19:22:54