ActionScript3,移动movieclip类型的对象

时间:2012-11-06 22:44:28

标签: actionscript-3 movieclip

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

2 个答案:

答案 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 targetcurrentTarget属性之间的区别。如果你的球内有多个图层/对象(精灵或其他影片剪辑),那么target将是这些子元素中的任何一个在点击过程中将鼠标放在它上面。 currentTarget指的是您将侦听器附加到的对象。在你的情况下,它们可能是相同的(如果你的球内没有任何影片剪辑),但如果你的球内有子影片剪辑,你的代码可能会有意想不到的结果。