幀速率

幀速率

幀速率是指每秒鐘刷新的圖片的幀數,也可以理解為圖形處理器每秒鐘能夠刷新幾次。對影片內容而言,幀速率指每秒所顯示的靜止幀格數。要生成平滑連貫的動畫效果,幀速率一般不小於8;而電影的幀速率為24fps。捕捉動態視頻內容時,此數字愈高愈好。

Flash

網上也有許多關於flash幀速率的討論,至今Flash Player的幀速率還有一些令人費解的問題。

Flash使用“相對定時模型”(relative timing model),這意味著它並不考慮全局的幀速率問題,只是儘可能地強制保持幀間隔時間。假設你設定影片速率為30幀/秒,這就意味著Flash Player要在幀間等待33毫秒(包括處理幀內容的時間),這種不精確的定時方法導致了許多問題。首先Flash Player依賴高級的作業系統級事件傳遞定時信息。最壞的情況下使用基於NetScape plugin API 的WM_TIMER,或者最好的情況下使用Internet Explorer API提供的多媒體時鐘。第二,因為windows或者MacOS使用的最小時間單位是毫秒,所以只能近似到毫秒的幀間隔單位。第三,作業系統、瀏覽器、Flash Player在執行幀上的腳本時還會有額外的開銷,所以最終的實際幀速率在設計幀速率上有-10到+5幀/秒的浮動,因此系統環境的性能影響很大。

相關資料

資料一

下面來討論一下最大的幀速率。在IE中理論上是100幀/秒。為什麼呢?WINDOWS的最小時間片是10毫秒。而FireFox的外掛程式不使用特定的時鐘,並不控制最大幀速率。從用戶抱怨FireFox下的外掛程式很耗CPU資源就可以看出。flash廣告一般都在8-12幀/秒以上,CPU占用在3%左右,單個廣告不會有問題,一個頁面可以輕鬆放兩個到三個廣告。前不久看新浪汽車首頁的時候覺得瀏覽器就像死掉了一樣,看了代碼也沒有什麼大問題,用firefox的developer tool bar,標記了所有SWF元素之後才發現,一個頁面竟然有31個flash(多數是廣告),IE的flashplayer使得瀏覽器過載,會出現慢的情況,尤其是在IE升級activeX的控制方式後,可能有某種後台隔離機制,使flash暫時在後台運行,直到用戶單擊一下。並且這些廣告可能存在不合理的製作方法,使得系統資源占用嚴重。

資料二

如果你的SWF或FLV在隱藏的標籤中不被播放的時候,不要驚奇。而Apple 則做的更進一步,在Safari中如果瀏覽器處於非活動狀態,外掛程式的幀速率只有4幀/秒,主要是為了節省電能和CPU資源。你可以試試,在GOOGLE video中播放一段視頻,切換到其他程式。

資料三

降低CPU占用的方法有不少,來自不同域的SWF檔案將獲得較低的優先權,可以有幀速率限制;OS有了GPU的幫助可以解放部分CPU的繪圖工作(好顯示卡很有用)。多數情況下最大幀速率可以達到60幀/秒,在較高的CPU負載情況下,可能會打對摺,也就是30幀/秒,OS X 系統已經是這樣處理了。

測試器

簡介

Flash作品中預設的幀速率只是理想化的,實際上Flash處理程式或是渲染圖像時需要消耗一定的時間,加上機器的差別,動畫運行時每一幀的顯示速度不盡相同。比如在一幀中放置過多的符號,該幀的幀速率就會遠遠低於預設的幀速率,導致畫面播放不流暢,或是掉幀的情況。如果使用幀速率測試器來檢測您的動畫,則可發現上述問題。因為幀速率測試器工作時會顯示出影片當前的平均幀速率。總之,無論是設計遊戲還是製作大型動畫,速度慢、運行不穩定的作品是不會有吸引力的,誰也無法去忍受一個只有4幀/秒的動畫。

幀速率 幀速率

設計要點

首先測試器本身要儘量的簡單,否則會影響測試效果。測試器中主要就是一個用來輸出測試結果的動態文本和一個重置按鈕。使用重置按鈕是為得到一個經過準確計算的幀速率,其工作方式就是刷新測試器。測試器測試本身時,顯示的幀速率應該和預設值是一樣的。

設計步驟

1、打開Flash MX,設定場景大小為350px×100px,背景色為"#0E6A99"(其實,場景的設定是無關緊要的)。按快捷鍵"Ctrl+F8"新建一個名為"fps"的影片剪輯符號。

2、在符號"fps"的場景里點擊選中工具面板中的文本工具 ,然後創建一個靜態文本,輸入"幀速率:"幾個字,如圖1所示。接著再創建一個動態文本框,點選中該動態文本框,在其屬性面板里進行如圖2所示的設定。最關鍵的設定是一定要定義變數"out"。

3、按快捷鍵"Ctrl+F8"新建一個名為"button"的按鈕符號(按鈕的設計要儘量簡單)。在按鈕上輸入"重置"兩個字,如示例所示。

4、點擊按鈕,點選彈出選單中的"動作"命令,在"動作"面板中輸入如下代碼:

on(release){ //release事件是在滑鼠指針經過按鈕時釋放滑鼠按鈕

frame = 0; //變數frame的作用是紀錄當前幀數

n = getTimer(); //函式getTimer()可以返回影片已經播放的時間,單位為毫秒

}

5、回到主場景中。按快捷鍵"Ctrl+L"打開庫,把庫中的影片剪輯符號"fps"拖拽到主場景中。

6、右鍵點擊影片剪輯"fps",點選彈出選單中的"動作"命令,並在"動作"面板中輸入如下代碼:

//onClipEvent是一個"事件"觸發器。當某個事件發生時,就執行花括弧中的語句。

//load事件是當影片剪輯被載入時,即執行語句。

onClipEvent (load) {

frame = 1;

n = 0;

}

onClipEvent (enterFrame) { //enterFrame事件是以影片每執行一幀就執行一次語句

//變數time用來紀錄當前影片運行的時間

time = (getTimer( )- n)/1000;

//Math對象的ceil方法可以返回大於等於括弧中數值並與其最接近的整數

//當前幀數frame除以播放時間time即可得到當前的幀速率

out = Math.ceil(frame/time);

//變數frame(幀數)進行累加

frame++;

}

到這裡,這個幀速率測試器就設計好了。現在只要把它直接複製並貼上到所要測試的動畫中就可以使用了。注意,使用測試器時,最好先在被測試動畫的場景中新建一層,然後再把測試器複製、貼上到該層中,這樣便於調整測試器的位置以及修改和清除。

相關詞條

相關搜尋

熱門詞條

聯絡我們