12-3 計時
真正在Flash遊戲裡使用最多的計時函數要算getTimer函數。不論倒數計時或是記錄玩家使用時間,getTimer都可以很容易的做到。
一、getTimer函數
語法:getTimer()
功能:取得影片開始播放到現在的毫秒數值。
利用getTimer函數製作可計時、暫時及停止的簡易馬錶。
執行【ch12/簡易馬錶.swf】檔案。
1. 剛開始時間為0時0分0秒。
2. 按『計時』鈕,開始計時,按『暫停』鈕,暫停計時。
3. 再按『計時』鈕,時間累加。
4. 按『停止』鈕,時間回到0時0分0秒。
載入【ch12/簡易馬錶.fla】檔案。
【計時文字】圖層:
1個動態文字欄位timeUsed_txt,顯示計時數據。
【按鈕】圖層:
3個按鈕,start_btn『計時』按鈕、pause_btn『暫停』按鈕、stop_btn『停止』按鈕。
【action】圖層:
影格1(初值)程式
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
txtTimeUsed = " timer_on = false; total_time = 0; micro_seconds = 0; stop(); function Timer() { if ( timer_on ) { time_base = getTimer(); timer_on = false; } micro_seconds=getTimer()-time_base+total_time; total_seconds = Math.floor(micro_seconds/1000); min = Math.floor(total_seconds/60); hours = Math.floor(min/60); minutes = Math.floor (min%60); seconds = Math.floor (total_seconds%60); if ( hours < 10 ) { hours = "0" + hours; } if ( minutes < 10 ) { minutes = "0" + minutes; } if ( seconds < 10 ) { seconds = "0" + seconds; } txtTimeUsed =hours+":"+minutes+":"+seconds; } |
解說:
行01∼04:設定四個變數的初值。txtTimeUsed為動態文字,顯示計時數據;timer_on記錄馬錶是否剛按下的狀態;total_time記錄暫停時間前所使用的時間;micro_seconds記錄馬錶按下後迄今所使用的時間。
行05:影片停止動作。(等待按下按鈕)
行06∼27:自訂的計時函數。
行07∼10:用timer_on變數判斷馬錶如果是剛按下的狀態,則time_base變數先存入影片開始播放迄今的毫秒數值,然後timer_on重歸false。
行11:micro_seconds馬錶按下迄今所使用的時間,等於影片開始播放迄今的毫秒數值,減去time_base(即上一次影片開始播放迄今的毫秒數值),加上total_time(上一次暫停時間前所使用的時間)。
行12:total_seconds 為micro_seconds除以1000,也就是毫秒換算為秒。小數部分捨去。
行13:由total_seconds除以60計算全部分鐘數。
行14∼16:分別計算出時hours、分minutes、秒seconds的數據。
行17∼19:如果時數小於10則補零。
行20∼22:如果分鐘數小於10則補零。
行23∼25:如果秒數小於10則補零。
行26:動態文字txtTimeUsed,顯示計時數據。
影格2(計時中)程式
01 |
Timer(); |
解說:
行01:執行自訂函數Timer,計算時間。
影格3程式
01 |
gotoAndPlay("計時中"); |
解說:
行01:與影格2形成迴圈不斷更新計時數據。
start_btn『計時』按鈕程式
01 02 03 04 |
on (release) { timer_on = true; gotoAndPlay(2); } |
解說:
行02∼04:
timer_on變為true,且主時間軸跳至第2格播放,也就是開始或繼續計時。
pause_btn『暫停』按鈕程式
01 02 03 04 |
on (release) { total_time = micro_seconds; stop(); } |
解說:
行02:將micro_seconds馬錶按下後迄今所使用的時間存入累計使用的時間。(也就是如果再按『計時』按鈕時可以繼續累計時間)。
行03:主時間軸影格2和3的迴圈停止不動。
stop_btn『停止』按鈕程式
01 02 03 |
on (release) { gotoAndStop(1); } |
解說:
行02:停止計時只要主時間軸跳回第1格初值影格即可。
二、setMask方法
語法:name1_mc.setMask(name2_mc);
功能:name2_mc影片片段遮蓋name1_mc影片片段。
藍色圓球由右往左水平移動遮蓋汽車,有探燈效果。
執行【ch12/setMask.swf】檔案。
載入【ch12/setMask.fla】檔案。
【action】圖層
影格1程式
01 if(blueCircle_mc._x>=100){ 02 blueCircle_mc._x--; 03 } 04 car_mc.setMask(blueCircle_mc); |
解說:
行01〜03:藍色圓球往左移動,圓球移動動水平位置100處停下來。
行04:藍色圓遮蓋汽車
影格2程式
01 |
gotoAndPlay(1); |
解說:
與影格1構成影格迴圈。