合并不同帧频(fps)的Flash文件

所属分类: 媒体动画 / Flash教程 阅读数: 157
收藏 0 赞 0 分享
  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个,会出现递归溢出的错误。
更多精彩内容其他人还在看

Flash AS 入门 as自定义函数

如果有一个功能或者一段代码要经常使用,则可以把它写成自定义函数,在用到的时候调用它。使用函数是为了简化编程的负担,减少代码量和提高效率
收藏 0 赞 0 分享

Flash AS 入门教程 事件处理函数及画线语句

我们学过在按扭或者影片剪辑上添加事件,这些事件也可以很方便地写在帧上,使用起来比较方便,有时也能起到简化脚本的作用。这些写在帧上的事件在软件中是位置是内置类影片MovieClip事件
收藏 0 赞 0 分享

Flash AS 入门教程 圆和椭圆函数的应用

Flash AS 入门教程 圆和椭圆函数的应用,需要的朋友可以参考下
收藏 0 赞 0 分享

Flash AS 入门教程 碰撞检测hitTest函数

hitTest函数是用来检测两个物体或目标是否重叠和相交,如果相交或重叠,就执行相应的动作,这对于我们做一些互动的动画和游戏是非常有用。比如在做点鞭炮、射击等的动画时,就可以用hitTest的方法
收藏 0 赞 0 分享

Flash AS 入门教程 乱数排列(随机数)方法

选取不重复的随机数(或者叫乱数),在flash的编程中经常都会用到,这里简单介绍下,需要的朋友可以参考下
收藏 0 赞 0 分享

Flash AS 入门教程 setInterval函数应用举例

setInterval动作的作用是在播放动画的时,每隔一定时间就调用函数,方法或对象
收藏 0 赞 0 分享

Flash AS 入门教程 三个实例讲解

画正玄图象,由外部输入控制起点横坐标、震幅和跨度,把文字和下面的mc的位置都分别作任意的排列
收藏 0 赞 0 分享

Flash AS 入门教程 多维数组和双重循环使用介绍

我们用到了一个mc对另外一个mc的遮罩。它的原理是:在作为遮罩片的mc中,复制部分小方块mc,并且随机放置这些小方块mc。当然,这样的随机放置不是任意的,必须满足两个条件:放置的位置不重复;能够完全遮罩图形
收藏 0 赞 0 分享

Flash AS 入门教程 loadMovie应用举例 多画面与画中画实现

加载外部文件命令loadMovie()可以在播放 SWF 文件的同时,将外部的 SWF 文件或 JPEG 文件加载到 Flash Player 中,使您可以同时显示几个 SWF 文件,或者在几个SWF 文件之间切换
收藏 0 赞 0 分享

Flash AS 入门教程 调入外部文本和加载外部mp3文件

在Flash制作时,有时候为了更灵活、方便,我们可以直接调入外部文本文件。要修改时只要修改记事本里的文本并保存,无需打开Flash源文件对其修改
收藏 0 赞 0 分享
查看更多