as3 定時器用法

2021-04-30 09:08:21 字數 2625 閱讀 6684

關鍵字: flas actionscript3.0

雖 然flash擁有越來越強大的周邊功能,但其核心依然是一款動畫製作軟體。在flash設計環境中,不編寫指令碼**,也能快速製作出效果驚人的時間軸動 畫。但此類動畫是固定的,無法根據環境動態調整。使用actionscript生成和控制動畫,才能隨心駕馭動畫的細節,並完成**運動和使用者互動等高階 功能。

高階語言都會提供定時器,as3更不例外。在指令碼**中,可以通過設定定時器控制動畫幀率。

動畫是利用人眼視覺殘留的特性來完成對真實世界運動的模擬。動畫必須包含三個要素:物件、幀率、軌跡。

毫無疑問,任何動畫都需要有物件。通過後期的編輯和組合,在乙個場景裡最終可以存在多個運動物件。但在動畫設計階段必須單獨處理,每次只操作乙個物件。

軌跡則是乙個抽象概念,主要描述動畫物件在單位時間內的屬性變化情況。在以時間為x 軸,屬性為y 軸的平面座標系中,軌跡能被影象化的繪製出來。

軌跡不僅是描述物件空間運動的,也可以描述顏色、透明度、形狀、大小等各種屬性的變化。乙個動畫物件在時間線內alpha透明度的變化軌跡如圖8-1所示。

根據動畫的不同,軌跡的影象可以是線性的,也可以是非線性的;軌跡可以是連續平滑的,也可以是隨機分布的。總而言之,軌跡就是描述運動物件屬性變化情況的乙個資料序列。

在建立flash時間軸動畫時,動畫幀率與 flash專案的預設幀率相同。要加速動畫物件的運動變化,只能通過改變軌跡實現。具體有兩種辦法:一種是增加單位時間內屬性的變化量,一種是減少單位變 化量需要的時間。形象而言,提高跑步速度可以有兩種方式:或者在10秒內多跑幾公尺,或者是減少跑100公尺所需的時間。無論選擇何種方式,都可以達到相同的 效果。

定時器類(timerclass)是actionscript 3.0的內建類,通過as3的事件分發響應機制實現週期觸發。定時器是乙個簡單卻又極為常用的類,系統全面的掌握它是非常必要的。

timer類的屬性如表8-1所示:

表8-1  timer類的屬性名稱

型別 說明

currentcount

int統計定時器開始後累計觸發次數。該屬性為唯讀屬性,使用者不能改變

delay

number

以毫秒為單位的定時器延時週期。兩次定時器觸發時間之間的間隔。注意,一秒等於

1000毫秒

repeatcount

int總觸發次數,當累計觸發次數達到總觸發次數後,定時器就會停止

running

boolean

定時器的執行狀態。定時器在執行則為

true

,定時器停止或未啟動則為

false

。注意該屬性為唯讀屬性,不能通過設定該屬性控制定時器狀態。對定時器進行操作必須使用它內建的方法

使用timer類的構 造函式「timer(delay:number,repeatcount:int=0)」可以直接建立乙個功能完備的定時器。此函式包含兩個引數,分別是 該類的delay屬性和repeatcount屬性。定時器建立後會保持停止,直到使用「start()」方法啟動後,才會開始計時。

當定時器啟動後,會每隔delay週期發出timer事件,必須在**中設定對此事件的偵聽,方可達到定時執行任務的目的。

var mytimer:timer=new timer(80,100);

mytimer.addeventlistener("timer", timerhandler);//注意,事件timer必須全部小寫

mytimer.start();

//事件處理函式

function timerhandler(event:timerevent):void

以上**建立了乙個總 觸發次數為100次的定時器mytimer。當mytimer啟動後,每隔80毫秒會發出一次定時器觸發事件。用 「addeventlistener()」函式設定timer事件的監聽,並編寫timerhandler()來處理這個事件。一切就緒後,使用 「start()」方法啟動定時器。

在定時器啟動後,使用currentcount屬性 查詢當前累計觸發次數,使用「stop()」方法可以停止乙個定時器。需要指出的是:「stop()」方法不過是暫停了定時器,並沒有清除定時器。當乙個 定時器被「stop()」方法停止後,timer物件的currentcount並沒有被清除。當再次使用「start()」方法啟動timer物件時, 定時器將繼續執行,直到觸發次數達到repeatcount屬性規定的數值。使用者不能在**中為currentcount賦值,要改變 currentcount屬性,只能使用「reset()」方法。「reset()」方法可以清零定時器的currentcount屬性。

當乙個定時器的觸發次數達到設定值repeatcount時,flashplayer將傳送timecomplete事件。通過響應此事件,可以重設time定時器並令其繼續執行下去。

使用者可以同時設定多個定時器。多個定時器之間平行存在,互不影響。

timer定時器是精確的,但是定時器的執行結果並 非絕對精確。無論是flash還是flex,最終的應用程式都是以swf檔案儲存。而flashplayer在解釋swf檔案時,會建立基於幀率的週期循 環。每次舞台更新的時間間隔是固定的,指令碼中的舞台操作會受到時間軸幀率的制約。

定時器的觸發事件間隔可以自由設定,所有的定時器事件都不會錯過。螢幕顯示雖然不是實時更新,但是由於重新整理的速度很快,不會造成顯著影響。實際上,任何語言的定時器都要受制於系統時鐘,都不是絕對精確的。

MFC 定時器用法

mfc定時器的使用 1.在標頭檔案定義乙個afx msg void ontimer uint ptr nidevent 函式 定義乙個定時器id define systimetimer 1 2.實現該函式 void cminigatetes lg ontimer uint ptr nidevent ...

Linux下的定時器用法

在linux下提供了兩種基本的timer機制 alarm和settimer。1 alarm include unsigned int alarm unsigned int seconds 這是個最簡單的timer,當呼叫了alarm n 時,等待n秒後,就會觸發一次sigalrm訊號,故需要在呼叫a...

IOS開發 NSTimer 定時器用法總結

nstimer在ios開發中會經常用到,尤其是小型遊戲,然而對於初學者時常會注意不到其中的記憶體釋放問題,將其基本用法總結如下 一 初始化方法 有五種初始化方法,分別是 nstimer timerwithtimeinterval nstimeinterval ti invocation nsinvo...