星期二, 4月 22, 2008

AS3:setInterval(); 與Timer();

其實「setInterval();」在ActionScript 3.0中仍然可以作用,讓我們來看看,假設我們想要「每隔半秒鐘說一次Hello,並算出Hello是第幾個。」在ActionScript 2.0的寫法是這樣子的:
var count:Number = 0;
var myInterval:Number = setInterval(this, "counting", 500);
function counting():Void {
 count++;
 trace("This is No." + count + " Hello...");
 if(count >= 10) {
  clearInterval(myInterval);
 }
}
其中,「500」指的是500/1000秒,也就是0.5秒,每隔半秒鐘的意思。在ActionScript 3.0的寫法則是:
var count:Number = 0;
var myTimer:Timer = new Timer(500,10);
myTimer.addEventListener(TimerEvent.TIMER, counting);
myTimer.start();
function counting(event:TimerEvent):void {
 count++;
 trace("This is No."+ count + " Hello...");
}
雖然myTimer要使用EventListener監聽,而且要用「start();」才能起始動作,好像有些麻煩…不過Timer直接設定程式執行的次數(例如上面的「10」就是執行10次的意思;如果設成「0」的話,則是持續執行的意思…),其實也是滿方便的。

2 則留言:

豚爹 提到...

請問...以前setInterval的時候可以附帶參數...ex setInterval(this, 1000, exFunc, 參數1,參數2,...);
現在換成Timer要怎麼做才能帶參數呢
Thanks~~~

perr 提到...

Timer沒有參數…
public function Timer(delay:Number, repeatCount:int = 0)
雖然沒有參數,但還是可以用addEventListener的方式,加入要執行的Function或參數(其實我的例子已經有寫出)。
你可以參考Lee Brimelow在他的The Flash Blog寫到的"ActionScript 3 QuickTip #1 - The Timer Class "(http://theflashblog.com/?p=231),或LiveDocs的Timer Class(http://livedocs.adobe.com/flex/2/langref/flash/utils/Timer.html)。