0

我正在尝试将 MovieClip 旋转固定的度数,它必须让我平滑等,所以 mc.rotate(int) 出来了。

目前我有这个无限期旋转:

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

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

谁能指出我正确的方向?第一次这样做,我很难过。Google fu 返回的结果好坏参半,我担心我使用了错误的关键字。

4

3 回答 3

3

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

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

就是这样。

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

于 2012-05-23T15:53:47.260 回答
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/

于 2012-05-23T15:34:46.377 回答
0

您可以使用基本的缓动来保持平稳:

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,我建议您避免使用库来制作动画并自己编写所有内容。尽管库的底层内容比我在这里介绍的要复杂得多,但您将对正在发生的事情有一个基本的了解。
否则,最好使用一个封装了所有这些有趣数学的库,而只需担心您的应用程序/游戏的逻辑。你可以在那里找到很多库,比如GTweenGreensock

希望能帮助到你。

于 2012-05-23T19:54:48.950 回答