0

我有一个持有者影片剪辑,它的基类是 foo。

package {
    import flash.display.MovieClip;

    public class Foo extends MovieClip {
        public function Foo() {
            trace("foo");
        }
    }
}

在 foo 中还有许多其他的影片剪辑,它们的基类是 bar。

package {
    import flash.display.MovieClip;

    public class Bar extends MovieClip {
        public function Bar() {
            trace("bar");
        }
    }
}

我在 bar 的构造函数中放置了一个跟踪,这样我就可以判断它是否被正确加载,当我将 foo 拖到场景中并运行剪辑时,其中的所有小条都会正确触发。但是,当我将它动态添加到场景中时,例如在 Main 类中:

package {
    import flash.display.MovieClip;

    public class Main extends MovieClip {
        public function Main() {
            this.addChild(new Foo());
        }
    }
}

突然, foo 中的所有小 bar 影片剪辑都恢复为常规的旧影片剪辑并且不会触发。有没有什么办法解决这一问题?

4

1 回答 1

0

getChildAt() 返回一个 DisplayObject。为了访问任何 Bar 方法/属性,您需要将其显式转换为 Bar 对象。

使用您的代码作为示例...

public class Main extends MovieClip {
    public function Main() {
        var foo:Foo = new Foo();
        stage.addChild(foo);
        foo.x = 0;
        foo.y = 0;

        trace(foo.getChildAt(1) as Bar);
    }//Main()
}

奇怪的是,(非常奇怪)我刚刚注意到 Flash 不运行 Bar 的自定义构造函数,除非有代码在某处将 Foo 中的这些对象声明为 Bar 类型。通过简单地修改上面的一个跟踪语句(以便它转换 getChildAt 的返回),Foo 中存在的所有 Bar 对象都运行了它们的自定义构造函数。去搞清楚。

于 2010-12-19T16:12:35.500 回答