注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

.

.

 
 
 

日志

 
 
关于我

本博为百科宝库(珍藏精文2万余篇)。温馨提示: (一)有博友2万8千多位,敬请朋友在理睬头像下加理睬为博友。 (二)百度一下理睬博客可进入本博。 (三)首页中部有理睬其它空间入点,朋友们可点相应的空间、博客进入。

网易考拉推荐

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

2009-12-17 14:27:26|  分类: FLASH教程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

        合并不同帧频(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个,会出现递归溢出的错误。

2009年6月22日 - 理睬 - .

更多精彩内容,请点击理睬日志链接浏览!


想提高人气

请点击以下链接

2008年12月8日 - 理睬 - 理 睬  2008年12月8日 - 理睬 - 理 睬

2008年12月8日 - 理睬 - 理 睬  2008年12月8日 - 理睬 - 理 睬

2008年12月8日 - 理睬 - 理 睬  2008年12月8日 - 理睬 - 理 睬

最新日志后面导航 - 理睬 - .


  评论这张
 
阅读(901)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017