轉 http://www.nshen.net/blog/article.asp?id=495 flex tip

           


          原文地址:http://www.kirupa.com/forum/showthread.php?t=223798
          原文作者:senocular

          原文目錄:

          1. Change the frame rate of your movie
          2. Abstract Classes
          3. Deep Object Copies with ByteArray
          4. Determine Instance Class or Superclass
          5. Multiple Arguments in trace()
          6. Loading Text and XML with URLLoader
          7. Get Sound Spectrum Information
          8. Garbage Collection: Reference Counting & Mark and Sweep
          9. Weak References
          10. MXMLC: SWF Metadata Tag
          11. TextField.appendText()
          12. Access to stage and root
          13. No More Color Class; Use ColorTransform
          14. Array.indexOf (Array.lastIndexOf())
          15. System.totalMemory
          16. Closing Net Connections
          17. AVM2 (AS3) to AVM1 (AS2/AS1) Communication via LocalConnection
          18. Class member enumeration
          19. Key.isDown in AS3
          20. Scale and Alpha Ranges
          21. Available ActionScript packages
          22. Numeric Calculations: Number vs. int Speed
          23. Getting Around globally accessible _root and _global
          24. ActionScript 2 to ActionScript 3 Converter
          25. Accessing FlashVars and HTML Parameters
          26. ActionScript Speed Through Typing
          27. LivePreview and the LivePreviewParent class
          28. Flex Component Kit for Flash CS3
          29. Loading URL encoded Variables
          30. Interactive Masks
          31. No _lockroot

          General:

          1. 動態改變幀頻:
           // change frame rate to 12 fps:
           stage.frameRate = 12;

          2. Abstract Classes

          as3不支持抽象類,但有幾個內置的抽象類

          DisplayObject
          InteractiveObject
          DisplayObjectContainer
          Graphics

          as3中這意味著不能實例化這些類,也不能繼承他們 ,以下為錯誤操作:
          // 錯誤1

          var myObj:InteractiveObject = new InteractiveObject(); // ERROR
          // 錯誤2

          package {
           import flash.display.DisplayObject;
           public class MyDisplay extends DisplayObject{
           public function MyDisplay (){
           // ERROR
           }
           }
          }

          3. Deep Object Copies with ByteArray

          as3中很容易使用(flash.utils.ByteArray)類來進行對象的深拷貝,深拷貝不只拷貝引用,而是拷貝整個相關對象,

          例如一個array里包含一個object引用,這個object也將被拷貝

          注意:這個方法通常用來拷貝一般的object

          拷貝函數:
          function clone(source:Object):* {
           var copier:ByteArray = new ByteArray();
           copier.writeObject(source);
           copier.position = 0;
           return(copier.readObject());
          }

          使用方法:
          newObjectCopy = clone(originalObject);

          4. Determine Instance Class or Superclass

          as3中可以很容易的獲取某個實例所屬的類和父類的類名,使用這兩個方法

          getQualifiedClassName (flash.utils.getQualifiedClassName).
          getQualifiedSuperclassName (flash.utils.getQualifiedSuperclassName)
          var sprite:Sprite = new Sprite();
          trace(getQualifiedClassName(sprite)); // "flash.display::Sprite
          trace(getQualifiedSuperclassName(sprite)); // "flash.display::DisplayObjectContainer"

          你甚至可以由字符串獲得類的引用,使用這個方法

          getDefinitionByName (flash.utils.getDefinitionByName).
          getDefinitionByName("flash.display::Sprite")); // [class Sprite]

          5. Multiple Arguments in trace()

          as3
          trace(value1, value2, value3);
          as1,as2
          trace([value1, value2, value3]);

          6. Loading Text and XML with URLLoader
          var loader:URLLoader;
          // ...
          loader = new URLLoader();
          loader.addEventListener(Event.COMPLETE, xmlLoaded);

          var request:URLRequest = new URLRequest("file.xml");
          loader.load(request);
          //...
          function xmlLoaded(event:Event):void {
           var myXML:XML = new XML(loader.data);
           //...
          }

          7.Get Sound Spectrum Information


          (flash.media.SoundMixer)類的computeSpectrum靜態方法可以把正在播放的聲譜信息轉成ByteArray,由此你可以想到辦法把聲譜可視化顯示出來
          // play sound...
          var spectrumInfo:ByteArray = new ByteArray();
          SoundMixer.computeSpectrum(spectrumInfo);
          // spectrumInfo is now a byte array with sound spectrum info

          具體可視化的方法可以看swfdong那里的教程 :)

          8. Garbage Collection: Reference Counting & Mark and Sweep

          垃圾回收機制包含兩個關鍵:

          (1)Reference Counting (引用數) :

          引用數就是在內存中引用同一個object的變量多少,每增加一個變量引用該object,引用數就+1
          var a:Object = new Object(); // new Object in memory given reference count of 1
          var b:Object = a; // Object now has reference count of 2
          無論什么時候,當沒有變量引用該object的時候,垃圾回收就會把他們回收了
          delete a; // Object has reference count of 1
          delete b; // Object has reference count of 0, removed from memory
          注意delete只能刪除非成員變量,而且刪除的是引用該object的變量而不是將object從內存中刪除,那是垃圾回收器要做的事
          看下邊這種情況:
          var a:Object = new Object(); // reference(a) count 1
          var b:Object = new Object(); // reference(b) count 1
          a.b = b; // reference(b) count 2
          b.a = a; // reference(a) count 2
          delete a; // reference(a) count 1
          delete b; // reference(b) count 1
          雖然a和b變量被刪除了,而且我們再也不能用程序訪問到他們了,但他們仍然存留在內存中~這種情況下垃圾回首器就沒有辦法了嗎?錯!這是記號清理要做的!

          (2)Mark and Sweep (記號清理):

          Mark and Sweep簡單來說就是一種掃描機制,如下圖,從root開始,掃到對象就mark一下,并掃描這個對象,等待全掃描完了,沒有mark的自然是沒有用的了,就會被從內存中刪掉了.
          [root] <- scan...
          [objectRef (marked)] <- scan...
          [objectRef (marked)] <- scan...
          [objectRef (marked)] <- scan...
          [objectRef (marked)] <- scan...
          [objectRef (marked)] <- scan...
          ...
          [delete all objects not marked]
          當然這種掃描是昂貴的,需要很長時間才能發生一次,所以不要指望他了,編程的時候多注意引用數就可以了

          9. Weak References

          使用弱引用來引用對象,不會被垃圾回收器視為有效的引用數。這樣可以幫助垃圾回收器的工作
          所以使用弱引用這是一種比較好的編程習慣,使你不會在不經意間錯誤的引用到了某個object導致這個object不能被從內存中卸載~~~
          但不是哪里都可以使用弱引用的,as3中有兩處可以使用:
          (1)在Directionary類的構造函數中傳入true
          var dict:Dictionary = new Dictionary(true); // use weak references as keys
          var obj:Object = new Object();
          dict[obj] = true;
          delete obj; // 雖然dict中有引用到obj,但并不是一個有效引用,所以obj仍然會被垃圾回收

          (2)在EventDispatcher的addEventListener 的第5個參數指定true
          // addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
          addEventListener(MouseEvent.CLICK, clickHandler, false, 0 true); // use weak references

          10. MXMLC: SWF Metadata Tag

          如果你用mxmlc編譯swf的話,可以使用swf metadata tag來指定swf的一些屬性

          支持以下屬性:

          width
          height
          frameRate
          backgroundColor

          例子:
          package {
           [SWF(width="500", height="450", frameRate="24", backgroundColor="#FFFFFF")]
           public class MyApp extends Sprite {

           }
          }

          11.TextField.appendText()

          (flash.text.TextField)類多了一個appendText()方法

          var my_tf = new TextField();
          my_tf.text = "Hello";
          my_tf.appendText(" world!"); // my_tf.text == "Hello world!"

          相當于以前的my_tf.text+=" world!" ,只是效率提高了

          12. Access to stage and root

          * 在as3中,當swf被loaded到player中時 stage object 是最頂端的容器,所有其他東西都在它里邊,包括root在內

          * 一個application中只有一個stage,卻可以有若干個 root ,比如有外部內容被Loader類加載近來的時候

          * 所有的DisplayObject (flash.display.DisplayObject)都有 stage 和 root 屬性,但只有當他們被直接或間接的加入到display list 中的時候才有值,否則他們都為 null 。

          * stage 屬性 如果有值,那么他一直指向 stage 對象 , root 卻不同 ,具體哪不同,下邊懶得翻引用原話 - -b

          引用
          For the stage, root always references the stage
          For the main timeline of the SWF and all display objects within it, root references the main timeline
          If an object is added directly to the stage from any timeline, the root property for it and its children references the stage
          For display objects in loaded SWF files, root references the main timeline of that SWF file
          For loaded bitmap images, root references the Bitmap instance of the image loaded
          Loader objects used to load external SWFs and images follow the rules of all other display objects within the SWF it is being used
          * 在as1 ,as 2中所有類都是在時間軸上創建的,這使的所有東東都能訪問_root ,在as3中就不同了,如果你不是DisplayObject的話,訪問root(或stage)會很困難,你需要一些技巧

          技巧1: 寫一個TopLevel類,讓Document類繼承它,通過TopLevel類訪問stage
           package {
           
           import flash.display.DisplayObject;
           import flash.display.MovieClip;
           import flash.display.Stage;
           
           public class TopLevel extends MovieClip {
           
           public static var stage:Stage;
           public static var root:DisplayObject;
           
           public function TopLevel() {
           TopLevel.stage = this.stage;
           TopLevel.root = this;
           }
           }
          }
          package {
           
           public class MyDocumentClass extends TopLevel {
           
           public function MyDocumentClass() {
           // code
           }
           }
          }
          package {
           
           public class RandomClass {
           
           public function RandomClass() {
           trace(TopLevel.stage); // [object Stage]
           }
           }
          }

          當然這很不oo也很不雅觀~~~如果別人的Document類沒繼承TopLevel類就會有問題出現

          技巧2 : 傳遞引用

          類似這樣通過構造函數將stage傳進去
          package {
           
           import flash.display.Stage;

           public class CustomObject {
           
           private var stage:Stage;
           
           public function CustomObject(stageRef:Stage) {
           
           // stage access through
           // constructor argument
           stage = stageRef;
           }
           }
          }

          作者給了一個 StageDetection 類
          地址:http://www.senocular.com/flash/actionscript.php?file=ActionScript_3.0/com/senocular/events/StageDetection.as

          好象是用于檢測某個display object 的 stage 或 root 屬性是否存在,然后才能把stage的引用傳給非display object

          [exclaim] (N神注:作者可能用的老版本flex?貌似現在的版本只要監聽DisplayObject 的 addedToStage 或removedFromStage 事件就可以檢查是stage和root的存在,不需要這個自定義的StageDetection 類吧...還請明人指點)

          13. No More Color Class; Use ColorTransform

          as3 中徹底沒了flash8就不推薦使用了的 Color類 改用 ColorTransform類

          注意ColorTransform 的rgb屬性已經改名為color
          // creates a red square
          var square:Shape = new Shape();
          square.graphics.beginFill(0x000000);
          square.graphics.drawRect(0, 0, 100, 100);

          var colorTransform:ColorTransform = square.transform.colorTransform;
          colorTransform.color = 0xFF0000;
          square.transform.colorTransform = colorTransform;

          addChild(square);

          14. Array.indexOf (Array.lastIndexOf())

          Array類多了兩個方法 indexOf 和 lastIndexOf
          AS3 function indexOf(searchElement:*, fromIndex:int = 0):int
          AS3 function lastIndexOf(searchElement:*, fromIndex:int = 0x7fffffff):int

          跟String類的同名方法差不多 ,返回指定元素位置,如果沒有返回 -1
          var sprite:Sprite = new Sprite();
          var object:Object = new Object();
          var boolean:Boolean = true;
          var number:Number = 10;

          var array:Array = new Array(sprite, object, number);
          trace(array.indexOf(sprite)); // 0
          trace(array.indexOf(number)); // 2
          trace(array.indexOf(boolean)); // -1

          15. System.totalMemory

          System 類 (flash.system.System) 有一個新屬性叫做 totalMemory,返回當前flash player占用的內存
          var o:Object = new Object();
          trace(System.totalMemory); // 4960256
          var o:MovieClip = new MovieClip();
          trace(System.totalMemory); // 4964352

          16. Closing Net Connections

          as1,2時候,當loading開始后,你就不能關閉這個連接了,在as3世界里,即使loading開始了,你也可以停止它
          var loader:Loader = new Loader();
          var request:URLRequest = new URLRequest("image.jpg");
          loader.load(request);
          addChild(loader);

          // 如果3秒鐘還沒loading完,就關閉連接
          var abortID:uint = setTimeout(abortLoader, 3000);

          // abort the abort when loaded
          loader.contentLoaderInfo.addEventListener(Event.COMPLETE, abortAbort);

          function abortLoader(){
           try {
           loader.close();
           }catch(error:Error) {} //注意這里有可能拋出IOError
          }
          function abortAbort(event:Event){
           clearTimeout(abortID);
          }

          17. AVM2 (AS3) to AVM1 (AS2/AS1) Communication via LocalConnection

          由于as3與as1,2虛擬機的不同導致as1,2 與as3不能直接溝通,如果需要的話必須要間接的使用

          LocalConnection AS2
          http://livedocs.macromedia.com/flash/8/main/00002338.html

          LocalConnection AS3 (flash.net.LocalConnection)
          http://livedocs.macromedia.com/flex/2/langref/flash/net/LocalConnection.html

          在as2中
          // ActionScript 2 file, AS2animation.fla
          // one movie clip animation named animation_mc on the timeline

          // local connection instance to receive events
          var AVM_lc:LocalConnection = new LocalConnection();

          // stopAnimation event handler
          AVM_lc.stopAnimation = function(){
           animation_mc.stop();
          }

          // listen for events for "AVM2toAVM1"
          AVM_lc.connect("AVM2toAVM1");

          as3中
          // ActionScript 3 file, AS3Loader.fla

          // local connection instance to communicate to AVM1 movie
          var AVM_lc:LocalConnection = new LocalConnection();

          // loader loads AVM1 movie
          var loader:Loader = new Loader();
          loader.load(new URLRequest("AS2animation.swf"));
          addChild(loader);

          // when AVM1 movie is clicked, call stopPlayback
          loader.addEventListener(MouseEvent.CLICK, stopPlayback);

          function stopPlayback(event:MouseEvent):void {
           // send stopAnimation event to "AVM2toAVM1" connection
           AVM_lc.send("AVM2toAVM1", "stopAnimation");
          }

          as3 movie把as2的movie加載進來然后調用as2的stopAnimation

          18. Class member enumeration

          as3中只有dynamic class 中的dynamic definitions才可以被枚舉(就是for in ),例如下邊的class就沒有可枚舉的成員
          package {
           
           public class EnumerateClass {
           
           public var variable:String = "value";
           public function method():void {}
           }
          }
          var example:EnumerateClass = new EnumerateClass();
          for (var key:String in example) {
           trace(key + ": " + example[key]); // 沒有輸出
          }

          即使上邊的class改成dynamic的,也是沒有輸出,為什么呢?

          因為里邊的變量和方法是他們自己的,而并不是動態(dynamic)填加的,只有動態填加的屬性可以被for in

          Object類有個 setPropertyIsEnumerable方法,可以控制某個屬性是否可枚舉,但它只對dynamic屬性有效
          package {
           
           public dynamic class EnumerateClass {
           
           public var variable:String = "value";
           public function method():void {}
           
           public function EnumerateClass(){
           this.dynamicVar = 1;
           this.dynamicVar2 = 2;
           this.setPropertyIsEnumerable("dynamicVar2", false);
           }
           }
          }

          上邊的dynamic類有兩個dynamic屬性, dynamicVar 和 dynamicVar2 ,滿足條件,都應該是可枚舉的

          但調用 setPropertyIsEnumerable("dynamicVar2", false);阻止了枚舉 dynamicVar2
          var example:EnumerateClass = new EnumerateClass();
          for (var key:String in example) {
           trace(key + ": " + example[key]); // dynamicVar: 1
          }

          propertyIsEnumerable方法可以測試某一屬性是否可枚舉
          trace(example.propertyIsEnumerable("variable")); // false
          trace(example.propertyIsEnumerable("dynamicVar")); // true
          trace(example.propertyIsEnumerable("dynamicVar2")); // false

          19. Key.isDown in AS3

          在as1,2時代,尤其是游戲中經常會用到 Key.isDown ,但到了as3,Key類已經不存在了,但我們可以通過些技巧實現這個類
           
          package {
           
           import flash.display.Stage;
           import flash.events.Event;
           import flash.events.KeyboardEvent;
           
           /**
           * The Key class recreates functionality of
           * Key.isDown of ActionScript 1 and 2. Before using
           * Key.isDown, you first need to initialize the
           * Key class with a reference to the stage using
           * its Key.initialize() method. For key
           * codes use the flash.ui.Keyboard class.
           *
           * Usage:
           * Key.initialize(stage);
           * if (Key.isDown(Keyboard.LEFT)) {
           * // Left key is being pressed
           * }
           */
           public class Key {
           
           private static var initialized:Boolean = false; // marks whether or not the class has been initialized
           private static var keysDown:Object = new Object(); // stores key codes of all keys pressed
           
           /**
           * Initializes the key class creating assigning event
           * handlers to capture necessary key events from the stage
           */
           public static function initialize(stage:Stage) {
           if (!initialized) {
           // assign listeners for key presses and deactivation of the player
           stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
           stage.addEventListener(KeyboardEvent.KEY_UP, keyReleased);
           stage.addEventListener(Event.DEACTIVATE, clearKeys);
           
           // mark initialization as true so redundant
           // calls do not reassign the event handlers
           initialized = true;
           }
           }
           
           /**
           * Returns true or false if the key represented by the
           * keyCode passed is being pressed
           */
           public static function isDown(keyCode:uint):Boolean {
           if (!initialized) {
           // throw an error if isDown is used
           // prior to Key class initialization
           throw new Error("Key class has yet been initialized.");
           }
           return Boolean(keyCode in keysDown);
           }
           
           /**
           * Event handler for capturing keys being pressed
           */
           private static function keyPressed(event:KeyboardEvent):void {
           // create a property in keysDown with the name of the keyCode
           keysDown[event.keyCode] = true;
           }
           
           /**
           * Event handler for capturing keys being released
           */
           private static function keyReleased(event:KeyboardEvent):void {
           if (event.keyCode in keysDown) {
           // delete the property in keysDown if it exists
           delete keysDown[event.keyCode];
           }
           }
           
           /**
           * Event handler for Flash Player deactivation
           */
           private static function clearKeys(event:Event):void {
           // clear all keys in keysDown since the player cannot
           // detect keys being pressed or released when not focused
           keysDown = new Object();
           }
           }
          }

          20.Scale and Alpha Ranges

          值得注意一下的是,as3中好多屬性值的范圍變化了,有些值原來范圍是0 到 100 ,現在變成了0 到 1 ,例如下邊幾個,要留心一下
          ActionScript 2.0 | ActionScript 3.0
          _xscale: 0 - 100 | scaleX: 0 - 1
          _yscale: 0 - 100 | scaleY: 0 - 1
          _alpha: 0 - 100 | alpha: 0 - 1

          21. Available ActionScript packages

          AS3 package 概要

          * flash 包 (player的核心類包,永遠可用)
          * mx 包 (flex 專用類包,flex 的組件們需要)
          * fl 包 (flash 專用類包,flash組件等)
          * adobe 包 (flash 專用類包,繪圖工具擴展等)

          更多詳細包內容,看文檔

          Flex: http://livedocs.adobe.com/flex/201/langref/
          Flash: http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/
          Apollo: http://livedocs.adobe.com/apollo/1.0/aslr/

          注意: Apollo相關的類在 flash和mx包里

          22. Numeric Calculations: Number vs. int Speed

          比較Number類型和新出現的int類型速度

          *只有在用到 bitwise operations (<<, >>, &, ^, and |) 的時候 int 類型比較快,例如
          var valueN:Number = 10;
          result = valueN << 2; // not so fast

          var valueI:int = 10;
          reesult = valueI << 2; // Fast!

          *其他情況下聲明為Number比較快

          23. Getting Around globally accessible _root and _global

          as1 ,2中任何地方都能訪問到_root ,_global ,這樣可以很簡單的保存變量或函數到這里,但在as3中已經沒有_global了,root 也只有Disobject在顯示列表里時才會得到,如果你非要這么做的話,應該自己寫一個glo類,里邊用一個靜態變量bal指向一個Object,下邊是代碼
          package {
           public class glo {
           public static var bal:Object = new Object();
           }
          }

          現在可以把 gol.bal 當成以前的_root或_global用了
          trace(glo.bal.foo); // undefined
          glo.bal.foo = "bar";
          trace(glo.bal.foo); // bar


          24. ActionScript 2 to ActionScript 3 Converter

          Patrick Mineault(http://www.5etdemi.com/blog/) 用php寫了一個as2 -->as3 轉換器,不是百分之百準確但也不錯

          online 版本 :http://www.5etdemi.com/convert

          下載 :http://www.5etdemi.com/convert/convert.zip

          25. Accessing FlashVars and HTML Parameters

          你可以用HTML中的 object/embed 代碼向鑲入的SWF傳遞變量。

          有兩種方法:

          1。在swf的url后邊加變量(query string)
          <!-- URL Variables -->
          <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="640" height="500" align="middle">
            <param name="allowScriptAccess" value="sameDomain" />
            <param name="movie" value="flashMovie.swf?myVar=1" />
            <param name="quality" value="high" />
            <param name="bgcolor" value="#EFF7F6" />
            <embed src="flashMovie.swf?myVar=1" quality="high" bgcolor="#EFF7F6" width="640" height="500" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
          </object>

          2.使用FlashVars
          <!-- FlashVars -->
          <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="550" height="400" align="middle">
            <param name="allowScriptAccess" value="sameDomain" />
            <param name="movie" value="flashMovie.swf" />
            <param name="quality" value="high" />
            <param name="bgcolor" value="#FFFFFF" />
            <param name="FlashVars" value="myVar=1" />  
            <embed src="flashMovie.swf" FlashVars="myVar=1" quality="high" bgcolor="#FFFFFF" width="550" height="400" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
          </object>

          在as2中這些變量會被簡單的聲明到_root上,但在as3中有所改變。現在這些變量被放到了root下的parameters對象下,上邊HTML傳的值可以這樣訪問:
          root.loaderInfo.parameters.myVar;

          26. ActionScript Speed Through Typing

          考慮到效率,盡量把你的變量聲明類型,如果可能的話避免使用dynamic class

          27. LivePreview and the LivePreviewParent class

          as2 的組件使用_global下的isLivePreview屬性來判斷是否是在Flash IDE中預覽,as3中這個屬性不見了,取而代之的是你可以檢查這個組件的parent是否為 LivePreviewParent 類的實例
          var isLivePreview:Boolean = (parent != null && getQualifiedClassName(parent) == "fl.livepreview::LivePreviewParent");

          [exclaim] N神注:as2時代的isLivePreview這個屬性偶也沒用過,不清楚這個翻譯的對不對 - -b )

          28. Flex Component Kit for Flash CS3

          Flex Component Kit for Flash CS3(在Adobe Labs里) 允許把flash中做的交互內容,在Flex中當成Flex comonnet來用

          現在可以很容易的使Flash symbol繼承我們的新 UIMovieClip 類
          從而使
          * flash 組件放在一個Flex container里,所有layout會很好的工作
          * flash 的幀標簽被完全轉換為 Flex 的state和 transition
          * 只要簡單的填加個 SWC 到 library path里Flex Builder就可以有flash組件的語法提示了
          * Simple JSFL commands are available to set up new documents as well as publish the Flex-enabled SWC (這句沒看明白- -b)

          29. Loading URL encoded Variables

          URLLoader類(flash.net.URLLoader) 在as3中用來讀外部文本文件.當一個外部文件被load后,它的內容會被存儲在URLLoader實例的data屬性里,一般情況下無論外部文件是什么格式,都會被以raw text形似讀取,如果讀變量可能需要改一下dataFormat屬性

          URLLoader類的dataFormat屬性決定被加載數據的格式。 dataFormat屬性的可選值在 URLLoaderDataFormat 類中(flash.net.URLLoaderDataFormat)

          可選值為:

          BINARY - 指定按2禁止數據接受
          TEXT - 指定當成文本接受
          VARIABLES - 指定當作 URL-encoded變量接受

          指定URLLoaderDataFormat.VARIABLES 作為 URLLoader的 dataFormat屬性, 被加載的數據將被當作一組變量,而不是字符串
          data屬性將為包含被加載變量的一個 URLVariables 類 (flash.net.URLVariables)的實例

          ActionScript 代碼:
          var loader:URLLoader = new URLLoader();

          // specify format as being variables
          loader.dataFormat = URLLoaderDataFormat.VARIABLES;

          loader.addEventListener(Event.COMPLETE, varsLoaded);

          // vars.txt contents: foo=bar&foo2=bar2
          loader.load(new URLRequest("vars.txt"));

          function varsLoaded (event:Event):void {
           trace(loader.data is URLVariables); // true
           trace(loader.data.foo); // bar
           trace(loader.data.foo2); // bar2
          }

          30. Interactive Masks

          默認情況下,當一個對象 mask 另一個對象的時候,前者(這個遮照)將失去它的交互性,例如,一個sprite有一個 click事件,但當這個sprite成為一個遮照的時候,這個click事件就不起作用了

          如果你想讓一個對象作為遮照的時候也擁有交互性,就指定它的buttonMode屬性為true

          ActionScript Code:
          maskInstance.buttonMode = true;

          31. No _lockroot

          ActionScript 3 沒有 _lockroot屬性了.
          _lockroot 屬性是在Flash Player 7 引入近來的,_lockroot屬性原本用來確保被load進來的movie的_root屬性始終引用它自己而不是主swf在 ActionScript 3 中, 所有的root引用永遠指向文件本身的root 就像_lockroot已經在那了一樣。( [exclaim] N神注:想引用原來主swf的root應該用stage了)
          [最后編輯于 N神, at 2007-05-13 13:09:08]

          posted on 2007-05-15 11:22 leoli 閱讀(1561) 評論(0)  編輯  收藏 所屬分類: Flex

          導航

          <2025年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          統計

          常用鏈接

          留言簿(6)

          隨筆分類

          隨筆檔案(17)

          文章分類(86)

          收藏夾(3)

          flex blog

          good site

          java blog

          my friend

          tools

          抓蝦

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 石屏县| 伊宁市| 新和县| 徐水县| 晋宁县| 顺平县| 含山县| 汉川市| 府谷县| 康保县| 汾西县| 甘洛县| 信阳市| 阿城市| 博爱县| 云和县| 墨玉县| 清新县| 运城市| 宜城市| 鄂伦春自治旗| 东山县| 新竹市| 仁化县| 博客| 张家港市| 井陉县| 丹东市| 禹城市| 雅安市| 崇文区| 正定县| 兴隆县| 泽州县| 山东| 宾川县| 阳新县| 桃源县| 胶州市| 永春县| 娄烦县|