0

我有一个扩展 MovieClip 的类。这个类有一个 update() 函数,需要在每个新帧中调用它,并在参数中使用 deltaTime。如果该类已被声明,但如果它刚刚添加到显示列表中,则此方法有效。主类中的代码:

package packageFoo{
    import flash.display.MovieClip;
    import packageFoo.customMovieclip;

    public class Main extends MovieClip{
        public function Main():void{
            var testMc:customMovieClip = new customMovieClip();
            addChild(testMc);
            testMc.update(dt);
        }
    }
}

这会输出正确的值,就好像我只是添加它而不引用它一样:

package packageFoo{
    import flash.display.MovieClip;
    import packageFoo.customMovieclip;

    public class Main extends MovieClip{
        public function Main():void{
            addChild(new customMovieclip());
            this.getChildAt(0).update(dt);
        }
    }
}

这会导致编译时错误:1061:通过静态类型 flash.display:DisplayObject 的引用调用可能未定义的方法更新。我不能真正引用'customMovieclip',因为我想要多个。

4

2 回答 2

1

看起来this.getChildAt(0)不是customMovieClip。如果您Main在设计时预先放置了组件,则可能会出现这种情况。要检查,请trace(this.numChildren)作为Main()构造函数的第一行。而且,要正确处理任何子类方法,您需要将DisplayObject返回的类型转换getChildAt()为正确的类型。

(this.getChildAt(0) as customMovieClip).update(dt);

不过,如果您想在主类的多个函数中处理该自定义 MC,则使用类范围的变量会更好。

于 2013-10-23T15:15:03.277 回答
0

如果你想避免在文档类中引用自定义类,你可以这样调用它:

this.getChildAt(0)["update"](dt);
于 2013-10-23T15:44:54.870 回答