2011年1月24日 星期一

[AS3] Timer類別_簡易計時器 Timer Clock

Timer()建構函式
public function Timer(delay:Number, repeatCount:int = 0)
參數
delay:Number — 計時器事件彼此之間的延遲時間,以毫秒為單位。不建議使用低於 20 毫秒的 delay。計時器頻率限制在每秒 60 影格,也就是小於 16.6 毫秒的延遲會造成執行階段問題。
repeatCount:int (default = 0) — 指定重複的次數。 如果為零,計時器便會無限次重複。 如果不為零,計時器會在執行指定的次數後停止。
Timer物件.addEventListener(TimerEvent.TIMER, 事件處理函數)
Timer物件.start() - 會啟動計時器 (如果尚未執行)。
timerComplete事件 - 每當完成由 Timer.repeatCount 設定的要求數目時傳送。
事件物件類型: flash.events.TimerEvent
屬性 TimerEvent.type = flash.events.TimerEvent.TIMER_COMPLETE


* Timer() 建構式第 2 個參數忘了設定,仍為預設值的 0 。但因為在count()函數做startNum > 0 才遞減的控制,仍可得到正常的結果
1000123_Timer_1.swf




import flash.utils.Timer;
import flash.events.MouseEvent;
import flash.events.Event;

//關閉start_mc的滑鼠感應
start_mc.mouseEnabled = false;

//宣告startNum文int型別,儲存開始倒數的秒數
//startNum_txt欄位輸入的數值將指定給startNum
var startNum:int;
trace(startNum);

//設定舞台上的TextField → startNum_txt的格式屬性
//這用來輸入開始倒數的秒數
startNum_txt.border = true;
startNum_txt.borderColor = 0x555555;
startNum_txt.background = true;
startNum_txt.backgroundColor = 0xbbccff;

//設定舞台上的TextField → timer_txt的格式屬性
//這用來顯示一開始的設定秒數,及倒數中的遞減數字
timer_txt.background = true;
timer_txt.backgroundColor = 0x0000cc;
timer_txt.text = "0";

//運算計時器顯示數字的遞減
function count(e:TimerEvent):void{
 if(startNum > 0){
  startNum --;
 }
 //int型別的startNum以toString()方轉成String型別
 //並指定給timer_txt的text屬性,即在timer_txt欄位顯示
 timer_txt.text = startNum.toString();
}

//Timer物件的宣告
function startTimer(e:MouseEvent):void{
 //每1000毫秒呼叫count函數一次
 var myTimer:Timer = new Timer(1000, 0);
 myTimer.addEventListener(TimerEvent.TIMER, count);
 //start_mc被按下會來呼叫執行此處的startTimer()函數,
 //當startNum > 0,控制startNum_txt的滑鼠感應為false
 //並且讓Timer物件 myTimer 開始運作
 if(startNum > 0){
  //
  startNum_txt.mouseEnabled = false;
  //呼叫start()方法,於是Timer物件開始運作
  myTimer.start();
  trace(startNum);
 }
 //此處e.currentTarget參照廣播MouseEvent.CLICK事件的start_mc
 e.currentTarget.mouseEnabled = false;
}

//打開start_mc的按鈕模式
start_mc.buttonMode = true;
//start_mc廣播MouseEvent.CLICK事件給startTimer偵聽函數
start_mc.addEventListener(MouseEvent.CLICK, startTimer);
//startNum_txt廣播Event.CHANGE事件給updateTimerTxt偵聽函數
startNum_txt.addEventListener(Event.CHANGE, updateTimerTxt);
//當startNum_txt輸入數字,即將數字存入startNum
//startNum_txt被輸入的數字指定給timer_txt
function updateTimerTxt(e:Event):void{
 startNum = int(startNum_txt.text);
 timer_txt.text = startNum_txt.text;
 trace(startNum);
 //當startNum > 0 ,start_mc的滑鼠感應才生效,其餘狀態則關閉
 if(startNum > 0){
  start_mc.mouseEnabled = true;
 }else{
  start_mc.mouseEnabled = false;
 }
}



**  Timer() 建構式第 2 個參數設為所輸入的開始倒數秒數 startNum
( 因為第一個參數為1000毫秒,即1秒觸發一次,startNum (秒) / 1 (次/秒) = startNum (次) )
● 此檔加了偵聽 TimerEvent.TIMER_COMPLETE 事件,當完成由 Timer.repeatCount 設定的要求數目時觸發
1000123_Timer_2.swf




import flash.utils.Timer;

import flash.events.MouseEvent;

import flash.events.Event;


//

//宣告startNum文int型別,儲存開始倒數的秒數

//startNum_txt欄位輸入的數值將指定給startNum

var startNum:int;

trace(startNum);



//

function ini():void{

 //關閉start_mc的滑鼠感應

 start_mc.mouseEnabled = false;

 //開啟sstartNum_txt 欄位的滑鼠感應

 startNum_txt.mouseEnabled = true;



 //設定舞台上的TextField → startNum_txt的格式屬性

 //這用來輸入開始倒數的秒數

 startNum_txt.border = true;

 startNum_txt.borderColor = 0x555555;

 startNum_txt.background = true;

 startNum_txt.backgroundColor = 0xbbccff;

 startNum_txt.text = "";

 //設定舞台上的TextField → timer_txt的格式屬性

 //這用來顯示一開始的設定秒數,及倒數中的遞減數字

 timer_txt.background = true;

 timer_txt.backgroundColor = 0x0000cc;

 timer_txt.text = "0";

}

ini();



//運算計時器顯示數字的遞減

function count(e:TimerEvent):void{

 if(startNum > 0){

  startNum --;

 }

 //int型別的startNum以toString()方轉成String型別

 //並指定給timer_txt的text屬性,即在timer_txt欄位顯示

 timer_txt.text = startNum.toString();

}



//

function myTimerCom(e:TimerEvent):void{

 ini();

}



//Timer物件的宣告

function startTimer(e:MouseEvent):void{

 //每1000毫秒呼叫count函數一次

 var myTimer:Timer = new Timer(1000, startNum);

 myTimer.addEventListener(TimerEvent.TIMER, count);

 myTimer.addEventListener(TimerEvent.TIMER_COMPLETE, myTimerCom);

 

 //start_mc被按下會來呼叫執行此處的startTimer()函數,

 //當startNum > 0,控制startNum_txt的滑鼠感應為false

 //並且讓Timer物件 myTimer 開始運作

 if(startNum > 0){

  //

  startNum_txt.mouseEnabled = false;

  //呼叫start()方法,於是Timer物件開始運作

  myTimer.start();

  trace(startNum);

 }

 //此處e.currentTarget參照廣播MouseEvent.CLICK事件的start_mc

 e.currentTarget.mouseEnabled = false;

}



//打開start_mc的按鈕模式

start_mc.buttonMode = true;

//start_mc廣播MouseEvent.CLICK事件給startTimer偵聽函數

start_mc.addEventListener(MouseEvent.CLICK, startTimer);

//startNum_txt廣播Event.CHANGE事件給updateTimerTxt偵聽函數

startNum_txt.addEventListener(Event.CHANGE, updateTimerTxt);

//當startNum_txt輸入數字,即將數字存入startNum

//startNum_txt被輸入的數字指定給timer_txt

function updateTimerTxt(e:Event):void{

 startNum = int(startNum_txt.text);

 timer_txt.text = startNum_txt.text;

 trace(startNum);

 //當startNum > 0 ,start_mc的滑鼠感應才生效,其餘狀態則關閉

 if(startNum > 0){

  start_mc.mouseEnabled = true;

 }else{

  start_mc.mouseEnabled = false;

 }

}


沒有留言: