Flash - 顺畅地滚动浏览MovieClip

时间:2013-05-08 11:18:23

标签: flash flex movieclip

假设我在全高清时有一个包含180帧的.flv。

我将其导入Flash(或flex),并希望能够通过单击并拖动视图来平滑地浏览时间轴。

我该怎么做?

我目前的解决方案是将每个帧加载到一个有效的BitmapData数组中,但是它使用了1.5 GB的内存,这可能会给我带来一些问题。

我只需要一种方法就可以左右单击并向左/向右拖动以顺畅地向前/向后滚动框架。

在我的简单测试中,它确实很滞后。

这是我的简单测试代码,可能会延迟:

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;
    }
}

3 个答案:

答案 0 :(得分:1)

我认为你应该重新压缩你的视频文件,每帧添加一个关键帧(关键帧距离= 1) - 在Adobe Media Encoder中有一个设置所述距离的选项。

生成的文件将比现在大,但应小于180位图。

在时间轴中嵌入时,请确保不要更改关键帧距离。

Flash只能“跳转”到一个名为“关键帧”的帧,如果视频位于时间轴上,它可以跳转到任何帧,但它必须首先读取关键帧,然后进行一些繁重的计算,因此它是滞后的。

答案 1 :(得分:0)

您可能需要将图片与SWF分开存放,在需要时将它们加载一张吗?我的意思是,你可以使用URLLoader类来加载你的位图,将loader.data保存到Bitmap-typed对象然后显示它。当然,你必须每次删除你以前的图片,你正在加载一个新图片。

答案 2 :(得分:0)

是的...流式传输数据,如果它在本地运行,因为我认为它确实给出了大小,不应该是一个问题,加载最靠近当前帧的帧,并摆脱其他方面。 ..此外,你确定你需要全高清视频吗?有时你可以伸展它,几乎感觉不到质量的损失......另外,不要使用bitmapdata数组,那就是巨大的,确保你已经压缩了......