在该函数中调用该函数并稍后停止循环 - 启动和;停止功能

时间:2012-01-07 18:58:31

标签: flash actionscript-3 function tween

我正在进行角色漫步。这段代码会让他向右摇摆,当它完成时会触发他向左摇摆,然后再次调用该函数继续循环。

我可以通过调用函数让循环工作正常但是如何停止函数? 我也想稍后再打电话。有没有办法启动和停止功能?

function wobble()
{
    var ws  = .1;
    var dis = 1;

    var WobbleRight:Tween = new Tween(Beau, "rotation", Strong.easeIn, Beau.rotation, dis, ws, true);
    WobbleRight.addEventListener(TweenEvent.MOTION_FINISH, WobbleL);
    function WobbleL(e:TweenEvent):void 
         {
        var WobbleLeft:Tween = new Tween(Beau, "rotation", Strong.easeIn,Beau.rotation, -dis, ws, true);
        WobbleLeft.addEventListener(TweenEvent.MOTION_FINISH, WobbleR);
            function WobbleR(e:TweenEvent):void 
            {
            wobble();
            }

        }
}
wobble();

或者有更好的方法吗?我想启动Tweens并通过调用函数来阻止它们。开着走,然后关掉。 - 非常感谢!

2 个答案:

答案 0 :(得分:1)

试试这段代码。请注意如何重用Tween,并在begin运动重新启动时将Tween位置重置为Beau.rotation。另外,不要将您的函数嵌入到另一个函数中。

(我强调了这个动作并放慢速度进行测试):

import fl.transitions.TweenEvent;
import fl.transitions.Tween;
import fl.transitions.easing.Strong;

var ws  = 1;
var dis = 10;

var WobbleRight:Tween;
var WobbleLeft:Tween;

this.addEventListener(MouseEvent.CLICK, toggleWobble);

function startWobble():void 
{
    WobbleR(null);
}

function WobbleL(e:TweenEvent):void 
{
    if (!WobbleLeft) 
    {
        WobbleLeft = new Tween(Beau, "rotation", Strong.easeIn, Beau.rotation, -dis, ws, true);
        WobbleLeft.addEventListener(TweenEvent.MOTION_FINISH, WobbleR);
    } else {
        WobbleRight.begin = Beau.rotation;
        WobbleLeft.start();
    }
}


function WobbleR(e:TweenEvent):void 
{
    if (!WobbleRight) 
    {
        WobbleRight = new Tween(Beau, "rotation", Strong.easeIn, Beau.rotation, dis, ws, true);
        WobbleRight.addEventListener(TweenEvent.MOTION_FINISH, WobbleL);
    } else {
        WobbleRight.begin = Beau.rotation;
        WobbleRight.start();
    }
}

function toggleWobble(e:MouseEvent):void 
{
    if( WobbleRight && WobbleRight.isPlaying ) {
        WobbleRight.stop();
    } else if ( WobbleLeft && WobbleLeft.isPlaying ) {
        WobbleLeft.stop();
    } else {
        startWobble();
    }
}

startWobble();

答案 1 :(得分:0)

你想以什么方式停止摇摆?多次摇晃停止,或者用户应该点击按钮?

如果你想在几次后停止摆动,那么你应该使用一个计时器。在计时器事件上调用wobble()。如果用户停止摆动,则只需使用触发器isStopped。如果isStopped设置为true,则从wobble()返回。