[英]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.