有關Flash AS3編程的一些總結_Flash教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:用Flex3.0 做一個簡單Flv 播放器
      今天早上,以前高中同學要我教他用Flex寫一個flv播放器.網上應該也有不少的教程了,但中午吃完飯后,覺得自己寫寫也不錯,究竟自己很少在自己博客上寫教程,

      最近用AS3寫一些項目,在編程過程中,碰到不少問題,同時也有一些收獲和心得。現在貼出來希望對大家在AS3編程有一些幫助。假如你發現有說得不對的地方,你可以指出來,大家一起來討論。

      1、AS3的強制類型轉換

      我之前一直以為是沒有這個功能的,而最近在看一些文檔,發現這個功能是有的。目前總結下來有兩種寫法:

      1. var loader:URLLoader = URLLoader(event.target);
        不知道這種寫法是借鑒那種編程語言,反正我沒有見過。
        補充這個語法說明:http://livedocs.adobe.com/flash/8_cn/main/00001211.html
      2. var loader:URLLoader = event.target as URLLoader;
        這種寫法是借鑒VB.Net編程語言,唉!AS3語法真得一個大雜燴。

      2、URLStream和URLLoader

      URLStream在文本文件數據方面可以支持多種字符編碼。
      URLLoader在進過測試后,發現除UTF-8字符編碼外,其他字符編碼讀過來的數據都是亂碼。

      可通過ByteArray對象字符編碼轉換(感謝abc12hjc提供補充代碼):

      public class MoxieAS extends Sprite
      {
      public function MoxieAS ()
      {
      var stream:URLStream = new URLStream;

      stream.addEventListener(Event.COMPLETE, complete);
      stream.load(new URLRequest("ttt.xml")); // <root><a /><b /><c /></root>
      }

      private function complete (event:Event):void
      {
      var stream:URLStream = event.target as URLStream;
      var xml:XML = XML(stream.readUTFBytes(stream.bytesAvailable));

      trace(xml.*.length()); // output 3
      }
      }

      具體用那個方式就看實際功能需求了。

      3、URLRequest

      URLStream、URLLoader、Loader等讀取外部數據的類,里的load方法參數值是URLRequest對象。我在編程過程總是喜歡直接寫地址字符串,原來習慣改過來看樣子要花點時間了。

      4、Loader

      在使用Loader來加載數據時,添加偵聽事件時,注重一定要給Loader的 contentLoaderInfo屬性增加事件,而不是給Loader對象增加事件。我就是因為加錯對象(要害是編譯時還沒有報錯),郁悶得差點要把電腦給扔了。

      錯誤寫法:
       var loader:Loader = new Loader();
       loader.addEventListener(Event.COMPLETE, completeHandler);
       loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
       loader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);

      正確寫法:
       var loader:Loader = new Loader();
       loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
       loader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
       loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);

      5、Loader加載過來的數據類型

      大家知道Loader是用來代替原來 MovieClip的loadMovie功能,用于加載外部的圖片文件,SWF文件。

      • 假如加載圖片文件(jpg,gif,png等)時,Loader.content得到數據類型是Bitmap對象;
      • 假如加載SWF文件(flash 9 版本)時,Loader.content得到數據類型是MovieClip對象;
      • 假如加載SWF文件(flash 9 以前版本) 時, Loader.content得到數據類型是AVM1Movie對象;

      6、stage

      在調試flash過程發現,假如把swf文件放到html頁面后,stage.stageWidth和stage.stageHeight在第一次加載調用時,他們的值為空值;

      7、 AVM1Movie

      假如是AVM1Movie 對象時,就不能直接調用stop,play,gotoAndStop等原來MovieClip對象的功能了,而且不能將AVM1Movie 對象轉換成MovieClip對象。目前解決辦法:一種是用flash cs3 重新生成 flash 9的swf文件;另一種是國外網站有說能AVM1和AVM2兩個虛擬機相互調用的方式(貼一個地址);

      8、mask

      在使用遮罩功能,發現一個問題,假如不把用于遮罩的顯示元件通過addChild方法添加到同一級的顯示容器里的話,遮罩效果就顯示不正常,不知道這個是不是一個bug。我差點因為這個問題而放棄AS3改用AS2了。

      分享:Flash有趣實驗:用視頻阻擋泡泡特效
      有攝像頭才可以試驗哦!!下面是代碼:varcam:Camera=Camera.get();cam.setMode(cam.width,cam.height,25);video.attachVideo(cam);vardepth_num:Numb

      /所屬分類:Flash教程/更新時間:2008-03-05
      相關Flash教程