| Flash中要合并不同帧频(fps)的文件的确问题是一个令人困扰的话题,因为Flash本身并不提供任何动态改变帧速的函数。 也无法写一个通用函数来达到这一目的。但凡事只要开动脑筋,总有解决办法。下面我们分情况讨论。 一.需要合并的几个flash文件完全独立 在大多数情况下,如果只需要把这些swf文件串起来逐一播放,不需要进行嵌套,单纯让每段swf按照它自己的速度播放,是完全可行的,只需要加少量脚本。 例如:你有3个swf文件,分别命名为:movie.swf,movie1.swf,movie2.swf。 只需要在movie.fla的最后一帧加上一句脚本:loadMovieNum("movie1.swf",0); 在movie1.fla的最后一帧同样加上一句脚本loadMovieNum("movie2.swf",0)。 注意,使用这种方法时,如果在动画的最前面加了loading脚本,它检测的载入是否完成只是针对第一段,如果需要检测所有片段是否已经载入,需要更复杂的脚本。< 二.合并的flash文件需要进行嵌套播放 这种情况比较麻烦,因为试图找出一劳永逸的方法似乎是不可能的。只能改啊改的,我讨厌重复劳动。 假设子体只包括跳转语句(stop、play、gotoAndStop、gotoAndPlay)。母体需要加如下代码: ///////在第一帧插入如下代码//////// MovieClip.prototype.c_stop=ASnative(900,13); MovieClip.prototype.c_play=ASnative(900,12); MovieClip.prototype.c_gotoAndStop=ASnative(900,17); MovieClip.prototype.c_gotoAndPlay=ASnative(900,16); //重构跳转函数 MovieClip.prototype.stop=function(){ this.stop_boolean=true; this.c_stop() }; MovieClip.prototype.play=function(){ this.stop_boolean=false; this.c_play() }; MovieClip.prototype.gotoAndStop=function(n:Number){ this.stop_boolean=true; this.c_gotoAndStop(n) }; MovieClip.prototype.gotoAndPlay=function(n:Number){ this.stop_boolean=false; this.c_gotoAndPlay(n) };
//子体播放函数 functionchildRun(target_mc:MovieClip){ if(!target_mc.stop_boolean){ target_mc.nextFrame(); if(target_mc._currentframe==target_mc._totalframes) } //递归检查子MC for(iintarget_mc){ if(target_mc._name) } //下面这句话很重要,它使你的高速动画能得到及时刷新,但相应的也提高了CPU的负载 updateAfterEvent(); }
//加载侦听器 varmclListener:Object=newObject(); //当子体载入完成时,停止子体并控制其播放 mclListener.onLoadComplete=function(target_mc:MovieClip){ clearInterval(child_val); child_val=setInterval(childRun,fps,target_mc); }; varimage_mcl:MovieClipLoader=newMovieClipLoader(); image_mcl.addListener(mclListener);
///////在需要加载子体的位置插入如下代码//////// //子体的宿主 this.createEmptyMovieClip("子体",this.getNextHighestDepth()); //如果需要载入的swf帧速是60,那么fps=1000/60 varfps:Number=1000/60; image_mcl.loadClip("子体.swf",子体); |