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