2013-05-08 56 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