倍可親

回復: 4
列印 上一主題 下一主題

Flash載入外部文件的各種方法與技巧

[複製鏈接]

3萬

主題

3萬

帖子

3萬

積分

版主

留學博士后(十二級)

Rank: 7Rank: 7Rank: 7

積分
33179
跳轉到指定樓層
樓主
藍藍的天 發表於 2008-1-30 22:12 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  Flash可以通過幀、按扭、影片剪輯來調用外部文件。調用的外部文件包括:外部文本文件、外部程序文件、外部*.swf文件、外部圖片文件、外部音樂文件、外部腳本文件等。



  現在我們將Flash載入外部文件的各種方法與技巧總結如下。

  一、用loadVariables調用外部文本文件

   文本文件開頭要以flash中的動態文本框的變數名開頭,如msg="………."這樣的形式,要和編輯的Flash文件放在同一目錄下。

   具體調用方式如下:

  1.用工具箱中的文本工具,選擇動態文本,給動態文本一個變數名,如:msg,在編輯區拖出一個文本框

  2.製作兩個按扭(一個調用,一個清除)拖放到場景中。

  3.在調用按扭上添加AS代碼:

on(release){//鬆開滑鼠后執行下面的代碼;

 loadVariables("msg.txt",msg);//調用和你編輯的Flash處於同一目錄下的msg.txt文本文件到動態文本msg中;

 System.useCodepage=true;//使外部文件的中文字元能夠正確顯示;

}

  4.清除按扭上的AS代碼:

on(release){//鬆開滑鼠后清楚動態文本框中的內容;

  msg="";

}

  Ctrl+Enter測試.

  當然代碼也可以寫在幀上調用按扭的實例名是bt1,清除按扭的實例名是bt2)

  第一幀上加如下代碼:

stop();

_root.bt1.onRelease=function(){

loadVariables("msg.txt",msg);

System.useCodepage=true;

}

_root.bt2.onRelease=function(){

_root.msg="";

}

  Ctrl+Enter測試.

  進階:讓調用的外部文本文件能夠滾動

  1.用工具箱中的文本工具,選擇動態文本,給動態文本一個變數名,如:msg,在編輯區拖出一個文本框

  2.新建一層,製作兩個按扭(一個調用,一個清除)拖放到此層中

  3.新建一層,在動態文本框的右側用矩形工具畫一個豎條,高度和動態文本一樣;再製作一個向上的方向"箭頭"按F8轉為按扭元件;複製一個"箭頭"按扭,垂直鏡象,使這兩個按扭和豎條的兩端對齊.

   4.調用按扭上的AS代碼:

on(release){//鬆開滑鼠后執行下面的代碼;

 loadVariables("msg1.txt",msg);//調用msg1.txt文本文件到動態文本框msg中;

 System.useCodepage=true;//使外部文件的中文字元能夠正確顯示;

}

  清除按扭上的AS代碼:

on(release){

 _root.msg="";//清除動態文本框中的內容;

}

  向上按扭上的AS代碼:

on(press){//在按扭的感應區上每按一次滑鼠執行下面的代碼;

 _root.msg.scroll=_root.msg.scroll-1;//文本向下滾動一行;

}

  向下按扭上的AS代碼:

on(press){//在按扭的感應區上每按一次滑鼠執行下面的代碼;

 _root.msg.scroll=_root.msg.scroll+1;//文本向上滾動一行;

}

   Ctrl+Enter測試.

  當然代碼也可以寫在幀上調用按扭的實例名是bt1,清除按扭的實例名是bt2,向上按扭的實例名是:up,向下按扭上的實例名是down)

在第一幀上加如下代碼:

_root.bt1.onRelease=function(){//鬆開滑鼠后執行下面的代碼;

 loadVariables("msg1.txt",msg);//調用msg1.txt文本文件到動態文本框msg中;

 System.useCodepage=true;//使外部文件的中文字元能夠正確顯示;

}

_root.bt2.onRelease=function(){//鬆開滑鼠后執行

 _root.msg="";//清除動態文本框中的內容;

}

_root.up.onPress=function(){//在向上按扭上每按一次滑鼠執行下面的代碼;

 _root.msg.scroll=_root.msg.scroll-1;//文本向下滾動一行;

}

_root.down.onPress=function(){//在向下按扭上每按一次滑鼠執行下面的代碼;

_ root.msg.scroll=_root.msg.scroll+1;//文本向上滾動一行;

}

  Ctrl+Enter測試。
有兩種偉大的事物,我們越是經常越是執著地思考它們,我們心中就越是充滿永遠新鮮、有增無已的讚歎和敬畏,那就是我們頭上的星空,我們心中的道德法則!

3萬

主題

3萬

帖子

3萬

積分

版主

留學博士后(十二級)

Rank: 7Rank: 7Rank: 7

積分
33179
沙發
 樓主| 藍藍的天 發表於 2008-1-30 22:13 | 只看該作者
 二、用loadMovie調用外部*.swf文件

  (一)調用外部*.swf文件載入到影片剪輯中

   外部*.swf文件要和編輯的Flash文件放在同一目錄下
   1.新建立一個空的影片剪輯mymc,把它放在場景中,實例名是:mymc.
   2.新建一層,製作兩個按扭(一個調用,一個清除)拖放到此層中
   3.調用按扭上的AS代碼:

on(release){//滑鼠離開按扭后執行下面的代碼;
 loadMovie("flash8.swf","mymc");//載入外部的"flash8.swf"文件到"mymc"空影片剪輯中;
 mymc._x=70;//載入影片的X軸坐標;
 mymc._y=20;//載入影片的Y軸坐標;
 mymc._xscale=70;//載入影片的寬度;
 mymc._yscale=70;//載入影片的高度;
}


  清除按扭上的AS代碼:

on(release){//滑鼠離開按扭后執行下面的代碼
 unloadMovie(mymc);//刪除用loadMovie載入的*.swf文件;
}

  Ctrl+Enter測試

  (二)調用外部*.swf文件並載入到時間軸上

   外部*.swf文件要和編輯的Flash文件放在同一目錄下
   1.製作兩個按扭(一個調用,一個清除)拖放到場景中
   2.調用按扭上的AS代碼:

on(release){//滑鼠離開按扭后執行下面的代碼
 loadMovie("flash8.swf",1);//載入外部的"flash8.swf"文件到場景中,層深為1;
}

  清除按扭上的AS代碼:

on(release){//滑鼠離開按扭后執行下面的代碼
 unloadMovie(1);//刪除層深為1的用loadMovie所載入的"flash8.swf"文件
}

  Ctrl+Enter測試 。
  當然二和三的代碼都可以寫在幀上。
有兩種偉大的事物,我們越是經常越是執著地思考它們,我們心中就越是充滿永遠新鮮、有增無已的讚歎和敬畏,那就是我們頭上的星空,我們心中的道德法則!
回復 支持 反對

使用道具 舉報

3萬

主題

3萬

帖子

3萬

積分

版主

留學博士后(十二級)

Rank: 7Rank: 7Rank: 7

積分
33179
3
 樓主| 藍藍的天 發表於 2008-1-30 22:13 | 只看該作者
 三、用loadMovie調用外部圖片,載入到影片剪輯中

  將外部圖片必須和正在編輯的Flash文件放在同一目錄下
  1.製作兩個按扭(一個調用,一個清除)拖放到場景中
  2.製作一個空的影片剪輯,拖到場景中,實例名是:mymc;
  3.時間軸上第一幀上的AS如下:

i=0;//定義一個變數i,並且賦初值為0;


  調用按扭上的AS代碼:

on(release){//滑鼠離開按扭后執行下面的代碼;
 i++;
 if(i>9){//因為外面這有9張圖,當變數大於9的時候,讓變數為1,這樣能夠使載入的圖片是連續的,即,每點一次按扭,就換一張圖,等到換到第9張圖,再點按扭,則循環到第一張圖(j1.jpg到j9.jpg,因為沒有j0.jpg,如果i=0,則會提示沒有找到j0.jpg);
  i=1;
 }
 loadMovie(("j"+i)+".jgp",mymc);//從j1.jpg開始載入圖片到影片剪輯mymc中;
 mymc._x=110;//以下設置載入圖片的屬性
 mymc._y=35;
 mymc._xscale=130;
 mymc._yscale=130;
}

  清除按扭上的AS代碼:

on(release){
 unloadMovie(mymc);//刪除掉用loadMovie載入到影片剪輯的圖片;
}


  Ctrl+Enter測試。當然AS代碼也可以寫在幀上。
有兩種偉大的事物,我們越是經常越是執著地思考它們,我們心中就越是充滿永遠新鮮、有增無已的讚歎和敬畏,那就是我們頭上的星空,我們心中的道德法則!
回復 支持 反對

使用道具 舉報

3萬

主題

3萬

帖子

3萬

積分

版主

留學博士后(十二級)

Rank: 7Rank: 7Rank: 7

積分
33179
4
 樓主| 藍藍的天 發表於 2008-1-30 22:13 | 只看該作者
四、用mySound.loadSound調用外部聲音文件,載入到場景中

  外部聲音文件必須和正在編輯的Flash文件放在同一目錄下
   1.製作兩個按扭(一個調用,一個清除)拖放到場景中
   2.調用按扭上的AS代碼:

on(release){//滑鼠離開按扭后執行下面的代碼;
 mySound=new Sound();//建立一個新的聲音對象mySound;
 mySound.loadSound("zaihuni.mp3″,true);//載入外部的*.mp3聲音文件到mySound對象中,並且按流的方式播放(參數為false時,是以裝載完后播放);
}


  清除按扭上的AS代碼:

on(release){
 mySound.stop();//當按下清除按扭后,停止聲音的播放
}


  Ctrl+Enter測試。
有兩種偉大的事物,我們越是經常越是執著地思考它們,我們心中就越是充滿永遠新鮮、有增無已的讚歎和敬畏,那就是我們頭上的星空,我們心中的道德法則!
回復 支持 反對

使用道具 舉報

3萬

主題

3萬

帖子

3萬

積分

版主

留學博士后(十二級)

Rank: 7Rank: 7Rank: 7

積分
33179
5
 樓主| 藍藍的天 發表於 2008-1-30 22:14 | 只看該作者
五、用loadMovieNum()函數調用所有外部文件

   (一)loadMovieNum()函數詳解

  用法:loadMovieNum("url",level [, variables])
  功能:在播放原來載入的 SWF 文件的同時將 SWF 文件或 JPEG 文件載入到 Flash Player 中的某個級別。
  參數:該函數有3個參數:url、target、variables。variables 是可選參數。

   1.參數url:要載入的 SWF 文件或 JPEG 文件的絕對或相對 URL(路徑)。該函數的此參數和上面loadMovie中的此參數用法完全一致,這裡不再作解釋。
   2.參數level:一個整數,指定 SWF 文件將載入到Flash Player中的哪個級別。載入的時候,可以這樣來寫:

  loadMovieNum("01.swf", 1);
   loadMovieNum("02.swf", 2);
   loadMovieNum("03.swf", 3);

  loadMovieNum載入后的控制可以這樣使用:   _level1._x=10 ;
   _level2.aa._alpha=50 ;
   _level3.aa.bb._width=110;
   _level4.mysound.stop();// 載入到級別為4的對象MC:mysound停止(播放音樂)


  需要注意的的是,每一個級別只能同時存在一個 SWF 或 JPEG 文件。如果兩個 SWF 或 JPEG 文件的級別相同,那麼後者將替換掉前者。級別不同的_level,級別大的將覆蓋掉級別小的,即:數字大的將處於數字小的之上(如上例:03.swf處在02.swf和01.swf上方,02.swf處在01.swf上方) 。

  注意:如果將 SWF 文件載入到級別 0,則 Flash Player 中的每個級別均被卸載,並且級別 0 將替換為該新文件。處於級別 0 的 SWF 文件為所有其它載入的 SWF 文件設置幀頻、背景色和幀大小。如:


loadMovieNum("00.swf", 0); //以下均不顯示,這樣只有一個00.swf
loadMovieNum("01.swf", 1);
loadMovieNum("02.swf", 2);
loadMovieNum("03.swf", 3);  


  3.參數variables:可選參數,指定發送變數所使用的 HTTP 方法。該參數必須是字元串 GET 或 POST。如果沒有要發送的變數,則省略此參數。GET 方法將變數追加到 URL 的末尾,它用於發送少量的變數。POST 方法在單獨的 HTTP 標頭中發送變數,它用於發送大量的變數。

  (二)loadMovieNum()的卸載外部文件調用
   使用 unloadMovieNum() 可刪除用 loadMovieNum() 載入的 SWF 文件或圖像。
   用法: unloadMovieNum(level)
   參數: level 所載入影片的級別 (_levelN)。
   如: on(release){
    unloadMovieNum (1200);//如下:unloadMovieNum (_level1200);不能卸載
    loadMovieNum ("sje.swf",1200)
    }


  (三)lloadMovieNum()的定位
   從前面我們已經知道了,函數loadMovieNum是將 SWF 或 JPEG 文件載入到_level(級別)的。並且是用_level1._x、_level2._x、_level1.aa._x之類的來定位的。比如我們要將02.swf載入到主場景坐標系的(50,100)中,代碼如下:

  loadMovieNum ( 「02.swf" , 1 ); //極有可能不能如願定位
_level1. _x = 50 ;
_level1. _y = 100 ;


   但是在測試的時候大家會發現載入進來的02.swf並沒有如我們預期的那樣出現在主場景坐標系的(50,100)位置,這是為什麼呢?
  原來,在沒有使用loadMovieNum以前,所有的圖形、MC等等都是處於_level0里的,我們通常使用的_root其實就是_level0。你可以作個測試:trace(_root==_level0),你會發現返回值是「true"。

  那麼,我們用loadMovieNum載入 SWF 或 JPEG 文件的時候,程序就要對你指定的_level進行創建,隨後再緊接著載入 SWF 或 JPEG 文件。如果像剛才代碼中寫的那樣,不判斷_level是否存在而調用其屬性,勢必無功而反。

  解決的方法也很簡單,就是用一個循環來判斷指定的_level是否存在。一旦_level產生,那麼它的種種屬性自然可以調用了。代碼如下:

loadMovieNum ( 「02.swf" , 1 ); //如願定位
onEnterFrame = function () {
  if ( _level1 ) {
   with ( _level1 ) {
    _x = 50 ;
    _y = 100 ;
   }
  delete onEnterFrame ;
 }
};


  或者:(上面的代碼較好些) loadMovieNum ( 「02.swf" , 1 );
 function go () {
  if ( _level1 ) {
   with ( _level1 ) {
    _x = 50 ;
    _y = 100 ;
   }
  clearInterval ( fps ); //清除對 setInterval() 的調用
 }
}
fps = setInterval ( go,100 );//每隔一定的時間,就調用函數、方法或對象




   再或者大家可以使用Macromedia Flash MX 2004中的MovieClipLoader類來判斷載入狀態。
  注意:深度depth值越大,其載入的內容越往後,即越在下層,處於下方,被遮蓋;這與級別標識符_levelN 相反,在_levelN 中 N 值越大,其載入的內容越往前,即越在上層,處於上方。

  (四)小技巧:用lloadMovieNum()保護你的作品——使用虛假的文件後綴

   其實載入外部文件的擴展名不一定非得以 .swf 命名,雖然載入的影片也在IE的臨時文件夾中,但已是自定義的文件格式了,這樣可以起到保護作用。

   例如: loadMovieNum("feng.exe",0);//載入feng.swf 將擴展名改為—> feng.exe載入
/*
loadMovieNum("feng.txt",0); //載入feng.swf 將擴展名改為—> feng.txt 載入
loadMovieNum("feng.doc",0); //載入feng.swf 將擴展名改為—> feng.doc 載入
loadMovieNum("feng.abcde",0); //載入feng.swf將擴展名改為 —> feng.abcde 載入
loadMovieNum("feng",0); //載入feng.swf 將擴展名刪除—> feng 載入
*/
有兩種偉大的事物,我們越是經常越是執著地思考它們,我們心中就越是充滿永遠新鮮、有增無已的讚歎和敬畏,那就是我們頭上的星空,我們心中的道德法則!
回復 支持 反對

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 註冊

本版積分規則

關於本站 | 隱私權政策 | 免責條款 | 版權聲明 | 聯絡我們

Copyright © 2001-2013 海外華人中文門戶:倍可親 (http://big5.backchina.com) All Rights Reserved.

程序系統基於 Discuz! X3.1 商業版 優化 Discuz! © 2001-2013 Comsenz Inc.

本站時間採用京港台時間 GMT+8, 2025-8-6 10:15

快速回復 返回頂部 返回列表