繁体   English   中英

Flash-平滑滚动MovieClip

[英]Flash - Scroll through MovieClip smoothly

假设我有一个.flv,其中包含180张全高清帧。

我将其导入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;
    }
}

我认为您应该重新压缩视频文件,每帧添加一个关键帧(关键帧距离= 1)-在Adobe Media Encoder中,可以选择设置上述距离。

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

嵌入时间线时,请确保不更改关键帧距离。

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

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

是的...传输数据,如果它在本地运行(如我所给定的那样,不成问题),则在任一侧加载最接近当前帧的帧并摆脱其他帧...另外,您确定需要完整的高清视频吗? 有时您可以将其拉伸而几乎不会感觉到质量的损失...而且,不要使用bitmapdata数组,那只是巨大的,请确保已对其进行压缩...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM