【发布时间】:2011-04-10 21:11:35
【问题描述】:
我在 Flash 中制作了一个视频,但不知何故损坏了,因此 fla 不再可用。而不是重新制作视频,我只想剪掉我发布的 .swf 的结尾,然后可能只是在结束后立即播放第二个 .swf(带有重播按钮和指向特定网站的链接)
我的问题是:我是否有可能在最后将 .swf 削减约 3 秒?
【问题讨论】:
标签: actionscript-3 flash flash-cs5
我在 Flash 中制作了一个视频,但不知何故损坏了,因此 fla 不再可用。而不是重新制作视频,我只想剪掉我发布的 .swf 的结尾,然后可能只是在结束后立即播放第二个 .swf(带有重播按钮和指向特定网站的链接)
我的问题是:我是否有可能在最后将 .swf 削减约 3 秒?
【问题讨论】:
标签: actionscript-3 flash flash-cs5
假设这是一个基于帧的动画或 swf,当您加载 swf 时,您可以使用 MovieClip(mySwf).currentScene.numFrames 获取总帧数。因此,您减少 3 秒的方法是根据当前帧速率计算 3 秒有多少帧,然后在 ENTER_FRAME 回调中检查 currentFrame 并在检测到它等于(totalFrames 少 3 秒帧数)。代码如下:
* 注意:代码已编辑,见 cmets *
var mySwf:MovieClip;
var reducedTotalFrames:int;
var clipLoader:Loader = new Loader();
clipLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);
clipLoader.load(new URLRequest("http://www.mysite.com/mySwf.swf"));
function loadComplete(e:Event):void
{
mySwf = LoaderInfo(e.currentTarget).content as MovieClip;
var totalFrameCount:int = mySwf.currentScene.numFrames;
var secondsToSubtract:int = 3;
var threeSecondFrameCount:int = (stage.frameRate * secondsToSubtract);
reducedTotalFrames = totalFrameCount - threeSecondFrameCount;
stage.addEventListener(Event.ENTER_FRAME, onRender);
stage.addChild(mySwf);
mySwf.gotoAndPlay(1);
}
function onRender(e:Event):void
{
if(mySwf != null && mySwf.currentFrame >= reducedTotalFrames){
//This is the end of the SWF with 3 seconds trimmed off. Here we can stop play
stage.removeEventListener(Event.ENTER_FRAME, onRender);
mySwf.stop();
doSomethingElse();
}
}
代码不在我的脑海中,但至少,如果它还没有按原样工作,你应该对这个概念有足够的理解,以使其工作或按照你认为合适的方式实施它。
【讨论】: