1

我可能会遗漏一些东西。我认为这将是一个常见问题,但几天来在网络上进行的广泛搜索并没有找到我需要的答案。我希望制作一个独立的电影剪辑,无论放置在哪里都可以使用。但是,从扩展影片剪辑的类中访问影片剪辑中定义的实例似乎很困难。

虽然我在 Flash Actionscript 2 (AS2) 中进行编码,但我想知道 AS3 是否存在同样的问题。

在以下场景中,如何访问实例“圈子”?

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

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.

在构造函数以外的方法中引用这些变量会导致相同的编译器错误。

非常感谢您的帮助。

4

1 回答 1

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具有正确的值。

于 2012-11-01T19:48:22.643 回答