0

对你们来说很容易,但对我来说是新的。我有一个名为 mcPlayer 的动画行走角色。在它的时间轴内,我有各种动画状态“walkingLeft”、“walkingRight”和“Idle”的帧标签。行走动画是他在一个地方行走。我希望能够使用按钮将带有动作脚本的角色移动到舞台上的各种目标,并在它移动时播放相应的动画。所以我能想到的最直接的方法就是这样......

import com.greensock.*;

btnRight.addEventListener(MouseEvent.CLICK, moveRight);
btnLeft.addEventListener(MouseEvent.CLICK, moveLeft);

function moveRight(Evt:MouseEvent):void{
TweenLite.to(mcPlayer,2,{x:450});
mcPlayer.gotoAndPlay("walkingRight");
}
function moveLeft(Evt:MouseEvent):void{
TweenLite.to(mcPlayer,2,{x:450});
mcPlayer.gotoAndPlay("walkingLeft");
}

我在 mcPlayer 时间轴上尝试了不同的命令,比如放置一个 stop(); 在每个动画的开头。我试过放一个 gotoandplay(); 在每个动画的结尾,它会转到开头并循环。我想尽可能少地使用时间线。

我该如何... 1. 在补间运动时让动画连续播放 2. 当动画到达目的地时停止动画,最后在 mcPLayer 达到其目标后让动画“空闲”播放。

4

1 回答 1

1

要循环动画,您将测试动画的最后一帧然后循环回来,您可以在补间中使用 onUpdate 参数执行此操作,并使用 onUpdateParams 传递更新所需的任何数据。比如动画标签和动画的最后一帧。

如果你想在补间完成后做一些事情,比如改变空闲动画,你会使用 onComplete 参数。

这是您可能会做的一个示例:

btnRight.addEventListener(MouseEvent.CLICK, moveRight);
btnLeft.addEventListener(MouseEvent.CLICK, moveLeft);

function moveRight(Evt:MouseEvent):void{

    // lastframe should be replaced with whatever the frame the walk right animation ends on.
    TweenLite.to(mcPlayer, 2, {x:450, onUpdate:updateHandler, onUpdateParams:['walkingRight', lastFrame], onComplete:idleHandler);
    mcPlayer.gotoAndPlay("walkingRight");
}
function moveLeft(Evt:MouseEvent):void{

    // lastframe should be replaced with whatever the frame the walk left animation ends on.
    TweenLite.to(mcPlayer, 2, {x:10, onUpdate:updateHandler, onUpdateParams:['walkingLeft', lastFrame], onComplete:idleHandler);
    mcPlayer.gotoAndPlay("walkingLeft");
}


function updateHandler(loopLabel:String, lastFrame:int):void
{
    if (mcPlayer.currentFrame == lastFrame)
    {
        mcPlayer.gotoAndPlay(loopLabel);
    }

}

function idleHandler():void
{
    mcPlayer.gotoAndPlay("idle");
    // this is also where you'd do anything else you need to do when it stops.

}

我不确定您是如何设置内容的,我只是猜测您在 mcPlayer 的时间线上拥有所有动画,并根据您所说的为每个动画添加了标签。

根据您的内容设置方式,您可能需要以不同方式实施。但概念仍然相同 - 使用 onComplete 和 onUpdate 来处理那些特定事件的事情。

于 2013-04-16T19:02:08.460 回答