毕业论文 论文提纲 论文写作 公文范例 教育论文 教育学论文 师范教育 学术论文     论文指导*
                     
 
   
   
   
   
           
 

当前位置:课件115学培吧(kj115.com)→flash网侠教程(助你成为顶尖课件高手)→系列文章

 
 
标题:如何将不同fps的flash合并到一起
 
展示台

文章来源 作者:admin 密码:admin 整理:湖北金鹰

◇网侠教程栏目简介
    提供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脚本,
它检测的载入是否完成只是针对第一段,如果需要检测所有片段是否已经载入,需要更复杂的脚本。
当然,写脚本是程序员的事,把任务交给他们吧,呵呵。
二. 需要进行嵌套播放
这种情况比较麻烦,因为试图找出一劳永逸的方法似乎是不可能的。只能改啊改的,我讨厌重复劳动。
假设子体只包括跳转语句(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) { target_mc.gotoAndPlay(1); } } // 递归检查子MC for (i in target_mc) { if (target_mc._name) { childRun(target_mc); } } //下面这句话很重要,它使你的高速动画能得到及时刷新,但相应的也提高了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/60var fps:Number = 1000/60;image_mcl.loadClip("子体.swf", 子体);然后,看一下子体文件,假设某帧上原来有下面的函数:stop();play_BTn.onRelease = function() {
play();};gotoAndStop_btn.onRelease = function() { gotoAndStop(30);};需要把它们进行一下改造,把所有缺省调用的跳转语句改成"mc.+跳转语句"的方式:this.stop();play_btn.onRelease = function() { this._parent.play();};gotoAndStop_btn.onRelease = function() { this._parent.gotoAndStop(30);};注意:别忘了改造子体中所有含有跳转语句的脚本(nextFrame和prevFrame不用改),如果子体含有onEnterFrame程序,请改成SetInterval方式。如果你的子体在某一帧包括的MovieClip超过了256个,会出现递归溢出的错误,关于如果防治递归溢出,很多时候使用递归函数,都会超过256级,请问有没有什么方法解除这个限制?我实在找不到这样的限制开关,只好利用其他方法来解决,通过实验,已成功解除这一限制,因为具有一定的通用性,将做法叙述如下:递归实质上是一个压栈和出栈的操作,所以可以把任何递归过程分解成两个过程:功能实现和栈管理。下面是一个简单的递归函数: function test(a:Number) { if (a>0) { //do something ... trace(a); //递归调用 test(a-1); } } 当test(254)时,函数还能运行正常,当test(255)时,就会出现“在一个动作列表中,递归超过了 256 级”的错误提示并终止程序了。将函数改成如下形式: //功能函数 function test2(a:Number){ if(a>0){ //do something ... trace(a) //压栈 test_array.push(a-1) } } //栈管理函数 function main(){ while(test_array.length>0){ //出栈 var a:Number=test_array.pop() test2(a) } } //定义堆栈 var test_array=new Array() //运行 test(5000) main()
用这种自定义堆栈的方法来模拟递归,也是没有办法的办法了,有时候解决某个问题,必须要用到递归函数,为保险起见,建议大家还是用以上办法来模拟吧,用一句老话--没有条件上,创造条件也要上!
当然大家可能有更好的方法,不妨讨论下。
OK,问题基本解决了,但愿你看完这个帖子后,不再为flash的fps问题感到困扰。母体 子体

 

 
课件115学培吧(湖北金鹰)欢迎您!永久免费服务网址:http://www.kj115.com
   
 

学员众多的FLASH课件学习基地,成万免费FLASH课件制作教程在线学习,还有免费内容课件教程、视频教程、课件技巧、课件探讨、课件欣赏、课件展示、实用教程、课件界面、课件脚本、课件游戏、课件下载、课件封面、课文内容图片、课文人物图片库、课件素材、图片素材、声音素材、动物素材、背景图片、背景资料、背景边框、课件顶栏图片素材、Dreamweaver教程、Dreamweaver网页课件教程、软件下载。承接学习和培训,承接课件订制,课件修改等所有课件相关服务。
本站主要业务:┃flash课件制作视频教程培训┃承接全国竞赛flash课件┃论文代写代发┃代办课件国家级获奖证书┃
联系:QQ:444860709 手机:13339817386


 
 

业务办理
鄂ICP备08005724号