1. 程式人生 > >as3 呼叫外部資原始檔(swf檔案、圖片檔案)

as3 呼叫外部資原始檔(swf檔案、圖片檔案)

 一、目標

     1.  在aa.swf中呼叫bb.swf

     2. bb.swf中有一個動態文字 txt1,aa.swf呼叫後,更改此文字的顯示內容

二、步驟

    生成bb.swf檔案

      1.新建bb.fla,並在上面加入一個動態文字,名命為"txt1"。 txt1的初始顯示為"hello"

      2.Ctrl + Enter執行 bb.fla, 會生成bb.swf檔案

    呼叫bb.swf

      1.新建aa.fla,在時間軸加如入程式碼

         ch();

         function ch() {
             //呼叫swf檔案部分
             var lr:LoadResource = new LoadResource('bb.swf', 120, 200);
             lr.addEventListener(Event.COMPLETE, cc);
             addChild(lr);
   
            //呼叫圖片部分
            //var lr:LoadResource = new LoadResource('http://img1.gtimg.com/gamezone/pics/21519/21519683.jpg', -1, -1);
            //lr.addEventListener(Event.COMPLETE, cc);
            //addChild(lr);
         }
         function cc(e:Event) {
             //改變swf檔案中MC物件的屬性
             var mc:MovieClip = MovieClip(e.target.content);
             mc.txt1.text = 'bbbb';

             //改變圖片的顯示屬性
             //e.target.content.height = 100;
             //e.target.content.width = 100;
             //e.target.content.alpha = .5;
         }

       說明:上面程式碼中將圖片呼叫部分註釋掉了,需要測試呼叫圖片的,可自行開啟

三、通用呼叫資源類

      package {
          import flash.display.Bitmap;
          import flash.display.BitmapData;
          import flash.display.Loader;
          import flash.display.MovieClip;
          import flash.display.DisplayObject;
          import flash.events.*;
          import flash.net.URLRequest;


          //載入資源(swf jpg png gif)
          public class LoadResource extends MovieClip {
              private var _url:String;    //待請求的URL
              private var _height:int;  //MC的高度
              private var _width:int;   //MC的寬度
       
              //本次載入的內容(注意: 1.要在丟擲Event.COMPLETE事件後,才能使用 2.載入swf檔案時,該變數是MovieClip; 載入圖片時,該變數是Bitmap)
              public var content:DisplayObject;        
       
              public function LoadResource(url:String, h:int, w:int) {
                 _url = url;   
                 _height = h;
                 _width  = w;           
                 configureAssets();
             }

              private function configureAssets():void {
                  var loader:Loader = new Loader();  //此處用的是 flash.display.Loader,而不是URLLoader
                  loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
                 loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);

                  var request:URLRequest = new URLRequest(_url);
                  loader.load(request);
           
                  addChild(loader);
              }


              private function completeHandler(e:Event){
                  content = e.target.content;           
           
                  //設定返回物件的寬和高
                  if(_height != -1){
                      content.height = _height;
                  }
                  if(_width != -1){
                      content.width = _width;
                  }
           
                  dispatchEvent(e);   //丟擲一個”Event.COMPLETE“事件,讓呼叫層可以做一些額外處理           
             }


              private function ioErrorHandler(event:IOErrorEvent):void {
                 trace("Unable to load image: " + event.text);
              }
          }
      }

四、其它

    Loader載入過來的資料型別:
          Loader 是用來代替原來MovieClip 的loadMovie 功能,用於載入外部的圖片檔案,SWF檔案。


          * 如果載入圖片檔案(jpg,gif,png等)時,Loader.content 得到資料型別是Bitmap 物件;
          * 如果載入SWF檔案(flash 9 版本)時,Loader.content 得到資料型別是MovieClip 物件;
          * 如果載入SWF檔案(flash 9 以前版本) 時, Loader.content 得到資料型別是AVM1Movie 物件;