幀速率

幀速率

每秒鐘刷新的圖片的幀數
幀速率是指每秒鐘刷新的圖片的幀數,也可以理解為圖形處理器每秒鐘能夠刷新幾次。對影片内容而言,幀速率指每秒所顯示的靜止幀格數。要生成平滑連貫的動畫效果,幀速率一般不小于8;而電影的幀速率為24fps。捕捉動态視頻内容時,此數字愈高愈好。[1]
  • 中文名:幀速率
  • 外文名:Frames Per Second
  • 縮寫:FPS
  • 單位:幀/秒

Flash

網上也有許多關于flash幀速率的讨論,至今FlashPlayer的幀速率還有一些令人費解的問題。

Flash使用“相對定時模型”(relativetimingmodel),這意味着它并不考慮全局的幀速率問題,隻是盡可能地強制保持幀間隔時間。假設你設置影片速率為30幀/秒,這就意味着FlashPlayer要在幀間等待33毫秒(包括處理幀内容的時間),這種不精确的定時方法導緻了許多問題。首先FlashPlayer依賴高級的操作系統級事件傳遞定時信息。

最壞的情況下使用基于NetScapepluginAPI的WM_TIMER,或者最好的情況下使用InternetExplorerAPI提供的多媒體時鐘。第二,因為windows或者MacOS使用的最小時間單位是毫秒,所以隻能近似到毫秒的幀間隔單位。第三,操作系統、浏覽器、FlashPlayer在執行幀上的腳本時還會有額外的開銷,所以最終的實際幀速率在設計幀速率上有-10到+5幀/秒的浮動,因此系統環境的性能影響很大。

相關資料

資料一

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

資料二

如果你的SWF或FLV在隐藏的标簽中不被播放的時候,不要驚奇。而Apple則做的更進一步,在Safari中如果浏覽器處于非活動狀态,插件的幀速率隻有4幀/秒,主要是為了節省電能和CPU資源。你可以試試,在GOOGLEvideo中播放一段視頻,切換到其他程序。

資料三

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

測試器

簡介

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

設計要點

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

設計步驟

1、打開FlashMX,設置場景大小為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++;

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

上一篇:延遲策略

下一篇:水力停留時間

相關詞條

相關搜索

其它詞條