将自定义方法称为显示对象AS3

时间:2013-10-23 15:00:39

标签: actionscript-3 flash class inheritance reference

我有一个扩展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',因为我想要多个。

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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

this.getChildAt(0)["update"](dt);