Actionscript 3 Flash CS5:AS3-导入swf播放X秒?

Actionscript 3 Flash CS5:AS3-导入swf播放X秒?,actionscript-3,flash,flash-cs5,Actionscript 3,Flash,Flash Cs5,我需要在开始时加载swf,但我不想播放视频的最后3秒 有人能帮我一个基本上可以让我的swf播放“x”秒的代码吗 这是我到目前为止得到的。。目前,它被设置为播放swf,但从中减去“x”秒,但由于某些原因,它似乎不起作用 var mySwf:MovieClip; var reducedTotalFrames:int; var clipLoader:Loader = new Loader(); clipLoader.contentLoaderInfo.addEventListener(Event.C

我需要在开始时加载swf,但我不想播放视频的最后3秒

有人能帮我一个基本上可以让我的swf播放“x”秒的代码吗

这是我到目前为止得到的。。目前,它被设置为播放swf,但从中减去“x”秒,但由于某些原因,它似乎不起作用

var mySwf:MovieClip;
var reducedTotalFrames:int;

var clipLoader:Loader = new Loader();
clipLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);
clipLoader.load(new URLRequest("schoolintro.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);


}

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

我想你只需要把这一行从

var threeSecondFrameCount:int = (stage.frameRate * secondsToSubtract);


不确定这是否是您想要的。

尝试一些基本调试,例如在onRender中的代码中放置跟踪语句以确保调用它,以确保mySwf引用正常工作(例如,跟踪mySwf.currentsecene.numFrames,如果为0,则表示您没有正确引用swf,或者swf不是基于帧的)。如果SWF不是基于帧的,那么你将在控制甚至做任何事情方面遇到真正的问题,因为加载的SWF中进行的所有动画/动作都是基于代码的。

整个想法是减去播放过程中占用3秒时间的帧数,这就是帧率是倍数的原因通过减少秒数,然后从总帧数中减去这个数字。应该阅读整个问题。:)但我一直在想为什么它不起作用?将秒数设置为相减间隔根本不起作用:[见我的答案。它可能至少是一个SWF,其中包含一些代码,或者显示列表的构建方式使正在播放的帧不存在于主时间线上,而是主时间线上的子帧。因此,例如,该SWF中的舞台上可能有一个动画。因此,当您参考对于加载的SWF帧数,可能会说1,而movieclip中的1帧有自己的嵌套timline。这只是一个场景,有许多不同的方法可以构建,这使得外部控制成为一个真正的问题。感谢Ascension Systems对我的更正,并对Kudla69没有正确阅读问题表示抱歉。Ascensi在系统上,您已经提到,如果加载的swf不是基于帧的,则stop()函数将无法工作。请尝试一些基本调试,例如在onRender中的代码中放置跟踪语句,以确保调用它,以确保mySwf引用正常工作(例如,跟踪mySwf.currentsecene.numFrames,如果为0,则表示您没有正确引用swf,或者swf不是基于帧的。)(.我追踪到了它,它说swf只有两帧长,而我知道它有几百帧。我追踪到了缩减的总帧,它给了我-70是的,所以有一个问题。要么你的swf是通过代码运行的,要么有嵌套的电影剪辑,其中一个剪辑中隐藏着基于时间线的动画。如果你编码在flash IDE中的SWF中,您的代码将默认为私有或受保护的方法,这将使您无法从外部访问和重写。如果它是嵌套的movieclip,您将不得不反编译以找出时间线在哪里,或者系统地遍历SWF中的显示列表,检查不管怎样,这些麻烦几乎超过了通过回收旧SWF来节省时间的好处。但我不确定它为什么会这样做?我制作的SWF除了结尾的stop()之外没有任何代码。
var threeSecondFrameCount:int = (stage.frameRate / secondsToSubtract);