2013-05-08 98 views
0

說我有一個.flv包含fullHD的180幀。Flash - 順利滾動MovieClip

我將其導入到Flash(或flex)中,並且希望能夠通過單擊並拖動視圖來平滑瀏覽時間軸。

我該怎麼做?

我目前的解決方案是將每個幀加載到一個BitmapData數組中,該數組可以工作,但它使用1,5 GB的內存,這可能會導致我的一些問題。

我只需要一種方法能夠點擊並拖動左/右來平滑地向前/向後滾動幀。

在我的簡單測試中,它確實很滯後。

這是我簡單的測試代碼,這是waaaay到laggy:

import flash.events.Event; 
import flash.events.MouseEvent; 

stop(); 

var mouseDownValue:Boolean = false; 
var currentFrameValue:int = 0; 
var maxFramesValue:int = 180; 
var oldMouseX:int; 


myMovie.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler); 
myMovie.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler); 
myMovie.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler); 


function mouseDownHandler(evt:MouseEvent):void{ 
    mouseDownValue = true; 
} 

function mouseUpHandler(evt:MouseEvent):void{ 
    mouseDownValue = false; 
} 

function mouseMoveHandler(evt:MouseEvent):void{ 
    if(mouseDownValue){ 
     if(oldMouseX<0) oldMouseX = mouseX; 
     currentFrameValue += (oldMouseX - mouseX)/2; 
     if(currentFrameValue>=(maxFramesValue-2)) currentFrameValue -= (maxFramesValue-1); 
     if(currentFrameValue<0) currentFrameValue += (maxFramesValue-1); 

     myMovie.gotoAndStop(currentFrameValue+1); 

     oldMouseX = mouseX; 
    } 
} 

回答

0

可能是你從SWF分開存放你的照片,一個加載它們,在需要時?我的意思是,你可以使用URLLoader類來加載你的位圖,將loader.data保存到位圖類型的對象中,然後顯示它。當然,你必須每次刪除你以前的圖片,你正在加載一個新的。

1

我認爲你應該重新壓縮你的視頻文件,每幀添加一個關鍵幀(關鍵幀距離= 1) - 在Adobe Media Encoder中有一個選項來設置所述距離。

生成的文件將比現在大,但應小於180位圖。

在時間線中嵌入時,請確保不要更改關鍵幀距離。

Flash只能跳轉到一個名爲'關鍵幀'的幀,如果視頻在時間軸上,它可以跳到任何幀,但它必須先讀取關鍵幀然後做一些重要的計算,所以它是滯後的。

+0

我知道這是舊的,但+1從我這裏解決了我在Flash中使用視頻時間線上的問題。謝謝! – 2014-04-22 09:23:22

0

是啊...流數據,如果它本地運行,因爲我認爲它確實給出了大小,應該不是一個問題,加載兩側最接近當前幀的幀,並擺脫其他的...另外,你確定你需要全高清視頻嗎?有時你可以伸展它,幾乎感覺不到質量的損失...另外,不要使用bitmapdata數組,這只是巨大的,確保你已經壓縮...

+0

我如何壓縮它? – 2013-05-29 13:36:55