这里我试图创建一个新的movieclip类型对象,在调用函数mvBall时移动它。当我运行代码时,我得到这个错误:将静态类型对象的值隐式强制转换为可能不相关的类型flash.display:MovieClip。后来我希望能够在球与另一个物体碰撞时使球反弹。我是动作脚本的新手,并不知道事情是如何工作的,所以任何帮助都会受到赞赏。这是代码:
private function frame(x:Event):void {
var ball:MovieClip = new MovieClip();
ball.addEventListener(Event.ENTER_FRAME, animate);
ball.graphics.beginFill(0xff0000);
ball.graphics.drawCircle(100, 100, 15);
ball.graphics.endFill();
stage.addChild(ball);
}
private function animate(ev:Event):void {
mvBall(ev.target);
}
private function mvBall(mc:MovieClip) {
mc.x += 10;
}
答案 0 :(得分:4)
您需要将目标投射到MovieClip
private function animate(ev:Event):void {
mvBall(ev.target as MovieClip);
}
有了它说最好只有一个ENTER_FRAME处理程序并在那里设置对象的动画。
stage.addEventListener(Event.ENTER_FRAME, animate);
private function animate(ev:Event):void
{
mvBall(myBall);
//other object animations
}
答案 1 :(得分:0)
您收到此错误是因为Event类的target
属性是object类型。
为了不抛出错误,您需要将其强制转换为MovieClip:
mvBall(ev.target as MovieClip);
或
myBall(MovieClip(ev.target));
要考虑的其他因素是Event
s target
和currentTarget
属性之间的区别。如果你的球内有多个图层/对象(精灵或其他影片剪辑),那么target
将是这些子元素中的任何一个在点击过程中将鼠标放在它上面。 currentTarget
指的是您将侦听器附加到的对象。在你的情况下,它们可能是相同的(如果你的球内没有任何影片剪辑),但如果你的球内有子影片剪辑,你的代码可能会有意想不到的结果。