缓和和计时器事件AS3

时间:2010-02-08 16:46:10

标签: flash actionscript-3

我的仪表看起来很棒,针头旋转了一圈。如何为其添加缓动?

仪表是根据计时器事件构建的。我希望针在最后反弹。我不需要只添加一个变量,而是需要控制它何时发生,这样我就可以用动画来调整它。

alt text http://www.ashcraftband.com/myspace/videodnd/icon8.jpg

工作代码“Thxs to member”

var timer:Timer = new Timer(20, 30);//tick 200, 36<br>

timer.addEventListener(TimerEvent.TIMER, onTimer); 
timer.addEventListener(TimerEvent.TIMER_COMPLETE, startAgain); 

timer.start(); 

function startAgain($evt:TimerEvent):void { 
    timer.reset(); 
    timer.start(); 
} 

function onTimer($evt:TimerEvent):void { 
    watch.hand.rotation = 30 + timer.currentCount;//tick 5 
} 

FAILED ATTEMPT“针头很疯狂,它只是想反弹”

//the "tick" may mess up the effect

import fl.transitions.Tween;
import fl.transitions.easing.*;
var timer:Timer = new Timer(20, 30);//tick 200, 36
  var startValue:Number = watch.hand.rotation;
  var finishValue:Number = 33;//400
  var duration:Number = 222;//3
  var myTween:Tween = new Tween(watch.hand, "rotation", Elastic.easeOut, startValue, finishValue, duration, false);//true
  myTween.looping = true;
timer.addEventListener(TimerEvent.TIMER, onTimer); 
timer.addEventListener(TimerEvent.TIMER_COMPLETE, startAgain); 

timer.start(); 

function startAgain($evt:TimerEvent):void { 
    timer.reset(); 
    timer.start(); 
} 
function onTimer($evt:TimerEvent):void { 
    watch.hand.rotation = 30 + timer.currentCount;//tick 5
 //watch.x =+ 66;

} 

实验
我的项目需要更好地理解计时器事件和补间。如果我可以让这个动画做的事情,我想我可以更好地理解如何传递函数调用和设置事件。

2 个答案:

答案 0 :(得分:1)

我会为此使用另一个补间引擎。查看tweener或gtween。使动画更容易,并且可以在补间完成动画时调用函数。您可以创建自定义补间并调整所需的反弹次数。使用flash内置的补间引擎可能有办法做到这一点,但不知道如何。

答案 1 :(得分:1)

正如@pfunc所提到的,使用第三方补间库会更容易实现。可以使用fl.transitions.Tween完成,但是补间和onComplete处理的链接不太理想。

如上所述,请查看以下其中一项:

GTween

TweenLite

Tweener

所有这3个API都有一个非常相似的API(远远优于Flash内置的Tween - 恕我直言)

当我帮助解决关于Timer类的原始问题时,我没有意识到这就是你想要做的。 Timer类不适合此问题,因为它旨在一致地处理事件。