平滑地旋转影片剪辑一定程度的度数

时间:2012-05-23 15:03:37

标签: actionscript-3

我试图将一个固定数量的MovieClip旋转到它对我平滑的程度,以便mc.rotate(int)出来。

目前我有无限期旋转:

    public function wheelSpinning () : void
    {
        addEventListener(Event.ENTER_FRAME, startSpin);
    }

    public function startSpin(event:Event):void 
    {
        mc.rotation+=1;
    }

有人能指出我正确的方向吗?第一次这样做,我很难过。谷歌富回归结果,我担心我会使用错误的关键词。

3 个答案:

答案 0 :(得分:3)

使用Greensock.com中的TweenMax库。它有一个非常有用的方法/插件:shortRotation自动在最短的方向旋转(当对象旋转超过180度时非常有用)。

TweenMax.to(mc, 1, {shortRotation:{rotation:270}});

就是这样。

我不会使用Flash的Tween类 - 它们效率不高。

答案 1 :(得分:0)

解决方案1: 一旦达到所需的旋转,就移除事件。

public function startSpin(event:Event):void 
{
    if(mc.rotation == someValue)
    {
        removeEventListener(Event.ENTER_FRAME, startSpin);
    }
    else
        mc.rotation+=1;
}

解决方案2: 使用flash的补间! http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/fl/transitions/Tween.html

解决方案3: 使用第三方补间库。我使用Tweener http://hosted.zeh.com.br/tweener/docs/en-us/

答案 2 :(得分:0)

您可以使用基本的 easing 来保持顺畅:

private var degrees:Number = 2; // increase rotation by 2
private var easing:Number = .5; // easing value
private var finalDegree:Number = 90; // Degree the rotation will iterate to

...

public function wheelSpinning() : void
{
    addEventListener(Event.ENTER_FRAME, startSpin);
}

public function startSpin(evt:Event):void 
{
    var c:Number = mc.rotation + degrees * easing;

    if (c >= finalDegree) 
    {
       /* Prevent the rotation from being greater than the
          finalDegree value and remove the event listener */
        mc.rotation = finalDegree;
        removeEventListener(Event.ENTER_FRAME, startSpin);
    }
    else
    {
        /* Apply the easing to the rotation */
        mc.rotation = c;
    }
}

使用这些值并找出符合您需求的值。 如果您正在学习AS3,我建议您避免使用库来动画并自行编写所有内容。虽然图书馆的内容比我在这里介绍的要复杂得多,但你将对正在发生的事情有一个基本的了解。
否则最好使用一个封装所有这些有趣数学的库,只关心你的应用程序/游戏的逻辑。您可以找到很多库,例如 GTween Greensock

希望它有所帮助。