手机
当前位置:查字典教程网 >网页设计 >Flash教程 >合并不同帧频(fps)的Flash文件
合并不同帧频(fps)的Flash文件
摘要:Flash中要合并不同帧频(fps)的文件的确问题是一个令人困扰的话题,因为Flash本身并不提供任何动态改变帧速的函数。也无法写一个通用函...

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)

};

//子体播放函数

function childRun(target_mc:MovieClip) {

if (!target_mc.stop_boolean) {

target_mc.nextFrame();

if (target_mc._currentframe == target_mc._totalframes)

}

// 递归检查子MC

for (i in target_mc) {

if (target_mc._name)

}

//下面这句话很重要,它使你的高速动画能得到及时刷新,但相应的也提高了CPU的负载

updateAfterEvent();

}

//加载侦听器

var mclListener:Object = new Object();

//当子体载入完成时,停止子体并控制其播放

mclListener.onLoadComplete = function(target_mc:MovieClip) {

clearInterval(child_val);

child_val = setInterval(childRun, fps, target_mc);

};

var image_mcl:MovieClipLoader = new MovieClipLoader();

image_mcl.addListener(mclListener);

///////在需要加载子体的位置插入如下代码////////

//子体的宿主

this.createEmptyMovieClip("子体", this.getNextHighestDepth());

//如果需要载入的swf帧速是60,那么fps=1000/60

var fps:Number = 1000/60;

image_mcl.loadClip("子体.swf", 子体);

接着看一下子体文件,假设某帧上原来有下面的函数:

stop();

play_btn.onRelease = function() ;

gotoAndStop_btn.onRelease = function() ;

需要把它们进行一下改造,把所有缺省调用的跳转语句改成"mc. 跳转语句"的方式:

this.stop();

play_btn.onRelease = function() ;

gotoAndStop_btn.onRelease = function() ;

注意:别忘了改造子体中所有含有跳转语句的脚本(nextFrame和prevFrame不用改),如果子体含有onEnterFrame程序,请改成SetInterval方式。如果你的子体在某一帧包括的MovieClip超过了256个,会出现递归溢出的错误。

【合并不同帧频(fps)的Flash文件】相关文章:

如何优化Flash动画使文件更小播放更流畅

几款经典Flash源文件集锦-导航篇

25个绝对让你应接不暇的Flash网站创意

如何利用Flash鼠绘不同颜色树叶

如何用Flash制作水晶球

如何控制Flash文件的最终体积大小

Flash制作人物会活动的关节实例教程

flash声音与歌词同步的三种方法

精简Flash文件体积的几个小技巧

电子杂志设计制作常用Flash技术

精品推荐
分类导航