我搞不懂这件事。我在看lynda.com ActionScript 3.0in Flash Professional CS5基本培训。我理解所有其他的东西,但是这个家伙把一个滑冰运动员放在舞台上,他在主时间线的第一帧上有这样的代码:
import flash.display.MovieClip;
import flash.events.MouseEvent;
var boarder:MovieClip = boarder_mc;
boarder.stop();
boarder.x = 0;
boarder.y = 0;
boarder.addEventListener(MouseEvent.CLICK, clickedBoarder);
function clickedBoarder(evt:MouseEvent):void
{
boarder.gotoAndPlay(2);
}
function restart():void
{
boarder_mc.gotoAndStop(1);
boarder_mc.x = 0;
}然后,在滑冰运动员上,他有一个显示对象容器(电影剪辑),其中有一个显示对象,一个滑冰运动员的位图图像,然后是滑冰运动员在滑冰运动员倒下的时间线上的动画。在最后一帧中,他有:
stop();
parent.restart();他解释说,这可能不起作用,他也不会得到一个错误:
1061: Call to a possibly undefined method restart through a reference with static type flash.display:DisplayObjectContainer.他解释说,它知道主时间线上有一个stop()函数,也知道主时间线上有一个重新启动函数,但数据类型是不同的。他还说,父母是主要的时间线。
他说我们需要把Object(parent).restart();
我的问题是什么数据类型,什么是主要的时间轴(电影剪辑,DisplayObject,显示对象容器)?
为什么它会是不同的数据类型?
谢谢
发布于 2014-10-31 17:17:24
主时间线是一个MovieClip,或者如果您有一个DocumentClass,那么很可能是一个至少扩展了MovieClip的自定义类型。
但是,当您请求滑板运动员MovieClip的" parent“时,实际上是在使用MovieClip从DisplayObject (ActionScript Docs Here)继承的parent属性。此属性将父级作为类型DisplayObjectContainer返回,而不管它实际是什么类型。因为它是DisplayObject的父类,所以它必须扩展DisplayObjectContainer的类型并不重要,所以这就是它的返回方式。
所以当你编译你的ActionScript时,编译器会查看"parent“并将其视为类型DisplayObjectContainer,查看其DisplayObjectContainer和错误的定义,因为DisplayObjectContainer没有一个名为"restart”的函数。
你所说的" stop“功能是不正确的,因为你不是在主时间线上调用stop,而是在滑冰运动员的时间线上调用stop。如果您想在主时间轴上调用stop,则需要调用parent.stop(),这将产生相同的错误,因为DisplayObjectContainer没有一个名为stop的方法。
这些都是编译器错误,是因为编译器遵循一组规则,并且不能对程序运行时实际发生的情况做出假设。它只知道当您调用parent.restart()时,它可能会收到一个不会让方法重新启动的DisplayObjectContainer,并且会出现运行时错误。
现在,通过将parent类型转换为object类型,您可以有效地告诉编译器这个对象可以有任何方法或属性,因为Object是一个动态类。因此,编译器现在将假设您作为开发人员知道"restart“方法将存在于提供给这段代码的”对象“上,因此不会再出错。
发布于 2014-11-01 21:30:49
非常感谢您的回复。这真的很让人困惑。我认为DisplayObjectContainer是Display对象的一个子类,它是它的扩展吗?我知道显示对象容器是一个显示对象,它可以包含其他显示对象和显示对象容器。因此,据我所知,maintimeline是一个电影剪辑,因此是一个DisplayObejctContainer,它可以包含其他显示对象(您在应用程序中创建的),这就是为什么parent返回显示对象容器,但它也是一个抽象类,这意味着它不能具有.restart和goToAndPlay()等方法,因为它实际上不能被实例化。然而,如果它如你所说的是一个MovieClip,那么它可以.我不明白it.Does是不是意味着它是一个抽象类?
https://stackoverflow.com/questions/26617911
复制相似问题