0

在这里,我试图创建一个新的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;
    }
4

2 回答 2

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
}
于 2012-11-06T22:49:51.187 回答
0

您收到此错误是因为targetEvent 类的属性是对象类型。

为了不抛出错误,您需要将其转换为 MovieClip:

mvBall(ev.target as MovieClip);

或者

myBall(MovieClip(ev.target));

需要考虑的其他事情是EventstargetcurrentTarget属性之间的区别。如果您的球内部有多个图层/对象(精灵或其他影片剪辑),target则将是这些子元素中的任何一个在单击期间将鼠标悬停在其上。 currentTarget指您已将侦听器附加到的对象。在您的情况下,它们可能是相同的(如果您的球内没有任何影片剪辑),但如果您的球内有子影片剪辑,您的代码可能会产生意想不到的结果。

于 2012-11-06T22:50:20.070 回答