2012-10-31 20 views
1

我可能会错过一些东西。我认为这将是一个常见问题,但几天来在网上进行的广泛搜索没有找到我需要的答案。我希望制作一个独立的影片剪辑,无论它放在哪里都可以起作用。但是,从扩展影片剪辑的类中访问影片剪辑中定义的实例似乎很困难。Flash Actionscript AS2 - 在类中的时间轴上定义的访问实例变量

虽然我在Flash ActionScript 2(AS2)我编码,我不知道是否存在AS3同样的问题。

在下列情况下,你如何访问实例“圈”?

在主时间轴上的影片剪辑有一个实例名称“广场”。 Square.as中定义的类Square扩展了该影片剪辑。在影片剪辑中,另一个影片剪辑放置在第一帧上,实例名称为“circle”。在第一帧var myName:String = "my name"上也声明了varialbe。下面的代码无法编译:

class Square extends MovieClip { 
     function Square() { 
      trace("Square.constructor, circle: " + circle); 
      trace(" --- myName: " + myName); 
     } 
} 

编译器错误:There is no property with name 'circle'.(同为MYNAME)。

在参考不利于增加this.。显然,编译器正在寻找类定义中的变量。

使用_level0.square.circle作品,但需要该类知道自己的实例路径。虽然_level0.square.myName不会产生编译器错误,但它的值为undefined

引用除构造函数等方法,这些变量会导致相同的编译器错误。

非常感谢您的帮助。

+0

嗨user1789547,也许如果实例驻留在舞台上,您必须将阶段引用传递到类中?我知道你的问题是关于AS2,但这可能是一些帮助:http://www.actionscript.org/forums/showthread.php3?t=250599 – Mike

+0

谢谢,迈克。我在我的搜索过程中看到了类似的讨论。但是他们试图引用类之外的某些东西,而我试图引用内部的东西,父级影片剪辑中的子级影片剪辑,该类正在扩展。从逻辑上讲,至少我认为,扩展类可以访问父级影片剪辑可以访问的所有内容。 -Keith – Braeburn

回答

0

我找到了一种方法来解决这个问题,使用eval(this).

class Square extends MovieClip { 
    var base:MovieClip; 

    function Square() { 
     base = eval(this); 
     trace("Square.constructor, circle: " + base.circle); 
     trace(" --- myName: " + base.myName); 
     onPress = procPress; 
    } 

    function procPress() { 
     trace("procPress: " + base.circle); 
     trace("procPress: " + base.myName); 
    } 
} 

没有编译器错误。在构造函数中,base.myName仍然是undefined(可以理解)。在通过点击调用的功能procPress中,base.myName具有正确的值。

+0

以上解决方案仅适用于AS2。在AS3中,引用'circle'或者'myName'直接工作正常,除了myName在构造函数时仍然是null并且在稍后被初始化。 – Braeburn