我试图将一个固定数量的MovieClip旋转到它对我平滑的程度,以便mc.rotate(int)出来。
目前我有无限期旋转:
public function wheelSpinning () : void
{
addEventListener(Event.ENTER_FRAME, startSpin);
}
public function startSpin(event:Event):void
{
mc.rotation+=1;
}
有人能指出我正确的方向吗?第一次这样做,我很难过。谷歌富回归结果,我担心我会使用错误的关键词。
答案 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 。
希望它有所帮助。