Link:INB Home|INB English| INB русский язык|INB العربية|INB Türkiye|INB فارسی|INB Español|INB Français|INB Português|INB Deutsch|INB 國語|INB 中文|INB 日本语|INB 한국어|INB ภาษาไทย|INB tiếng Việt||FL 教程Flash 合并不同幀頻(fps)的Flash文件
INB 國語論壇
歡迎光臨(工業與草根研究員)對工業時代充滿了戰鬥精神,你和我都通過網絡空間與當地草根精神研究員來到瘋狂實驗室。家inbforum.com,永久名稱:tw-inbforum.forums2u.com
INB 國語論壇
歡迎光臨(工業與草根研究員)對工業時代充滿了戰鬥精神,你和我都通過網絡空間與當地草根精神研究員來到瘋狂實驗室。家inbforum.com,永久名稱:tw-inbforum.forums2u.com
INB 國語論壇

歡迎光臨(工業與草根研究員)對工業時代充滿了戰鬥精神,你和我都通過網絡空間與當地草根精神研究員來到瘋狂實驗室。家inbforum.com,永久名稱:tw-inbforum.forums2u.com


您沒有登錄。 請登錄註冊

《《《《《《《上一页INBforum   向下

上一页INBforum》》》》》》》上一篇主題 下一篇主題 向下  內容 [第1頁(共1頁)]

1FL 教程Flash 合并不同幀頻(fps)的Flash文件 Empty FL 教程Flash 合并不同幀頻(fps)的Flash文件 周四 3月 03, 2011 6:53 am

Admin

Admin
Admin
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個,會出現遞歸溢出的錯誤。



google_protectAndRun("ads_core.google_render_ad", google_handleError, google_render_ad);]

http://tw.inbforum.com

上一页INBforum   向下

上一页INBforum上一篇主題 下一篇主題 回頂端  內容 [第1頁(共1頁)]

這個論壇的權限:
無法 在這個版面回復文章

Copyright ©2009-2010 LTD Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.

IT:SINGLESERVGoogle谷歌翻译TranslateFORUMSOFTLAYERGoogle谷歌广告联盟AdSenseAsia

 

Free forum | ©phpBB | 免費論壇互助中心 | 違法舉報 | Cookies | Latest discussions