<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    轉(zhuǎn) 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. 動態(tài)改變幀頻:
     // change frame rate to 12 fps:
     stage.frameRate = 12;

    2. Abstract Classes

    as3不支持抽象類,但有幾個內(nèi)置的抽象類

    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)類來進行對象的深拷貝,深拷貝不只拷貝引用,而是拷貝整個相關(guān)對象,

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

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

    拷貝函數(shù):
    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靜態(tài)方法可以把正在播放的聲譜信息轉(zhuǎn)成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

    垃圾回收機制包含兩個關(guān)鍵:

    (1)Reference Counting (引用數(shù)) :

    引用數(shù)就是在內(nèi)存中引用同一個object的變量多少,每增加一個變量引用該object,引用數(shù)就+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從內(nèi)存中刪除,那是垃圾回收器要做的事
    看下邊這種情況:
    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變量被刪除了,而且我們再也不能用程序訪問到他們了,但他們?nèi)匀淮媪粼趦?nèi)存中~這種情況下垃圾回首器就沒有辦法了嗎?錯!這是記號清理要做的!

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

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

    9. Weak References

    使用弱引用來引用對象,不會被垃圾回收器視為有效的引用數(shù)。這樣可以幫助垃圾回收器的工作
    所以使用弱引用這是一種比較好的編程習慣,使你不會在不經(jīng)意間錯誤的引用到了某個object導致這個object不能被從內(nèi)存中卸載~~~
    但不是哪里都可以使用弱引用的,as3中有兩處可以使用:
    (1)在Directionary類的構(gòu)造函數(shù)中傳入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個參數(shù)指定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在內(nèi)

    * 一個application中只有一個stage,卻可以有若干個 root ,比如有外部內(nèi)容被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中所有類都是在時間軸上創(chuàng)建的,這使的所有東東都能訪問_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類就會有問題出現(xiàn)

    技巧2 : 傳遞引用

    類似這樣通過構(gòu)造函數(shù)將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?貌似現(xiàn)在的版本只要監(jiān)聽DisplayObject 的 addedToStage 或removedFromStage 事件就可以檢查是stage和root的存在,不需要這個自定義的StageDetection 類吧...還請明人指點)

    13. No More Color Class; Use ColorTransform

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

    注意ColorTransform 的rgb屬性已經(jīng)改名為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占用的內(nèi)存
    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開始后,你就不能關(guān)閉這個連接了,在as3世界里,即使loading開始了,你也可以停止它
    var loader:Loader = new Loader();
    var request:URLRequest = new URLRequest("image.jpg");
    loader.load(request);
    addChild(loader);

    // 如果3秒鐘還沒loading完,就關(guān)閉連接
    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加載進來然后調(diào)用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的,也是沒有輸出,為什么呢?

    因為里邊的變量和方法是他們自己的,而并不是動態(tài)(dynamic)填加的,只有動態(tài)填加的屬性可以被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 ,滿足條件,都應(yīng)該是可枚舉的

    但調(diào)用 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時代,尤其是游戲中經(jīng)常會用到 Key.isDown ,但到了as3,Key類已經(jīng)不存在了,但我們可以通過些技巧實現(xiàn)這個類
     
    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 ,現(xiàn)在變成了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 專用類包,繪圖工具擴展等)

    更多詳細包內(nèi)容,看文檔

    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相關(guān)的類在 flash和mx包里

    22. Numeric Calculations: Number vs. int Speed

    比較Number類型和新出現(xiàn)的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 ,這樣可以很簡單的保存變量或函數(shù)到這里,但在as3中已經(jīng)沒有_global了,root 也只有Disobject在顯示列表里時才會得到,如果你非要這么做的話,應(yīng)該自己寫一個glo類,里邊用一個靜態(tài)變量bal指向一個Object,下邊是代碼
    package {
     public class glo {
     public static var bal:Object = new Object();
     }
    }

    現(xiàn)在可以把 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 轉(zhuǎn)換器,不是百分之百準確但也不錯

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

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

    25. Accessing FlashVars and HTML Parameters

    你可以用HTML中的 object/embed 代碼向鑲?cè)氲腟WF傳遞變量。

    有兩種方法:

    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中有所改變。現(xiàn)在這些變量被放到了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中做的交互內(nèi)容,在Flex中當成Flex comonnet來用

    現(xiàn)在可以很容易的使Flash symbol繼承我們的新 UIMovieClip 類
    從而使
    * flash 組件放在一個Flex container里,所有l(wèi)ayout會很好的工作
    * flash 的幀標簽被完全轉(zhuǎn)換為 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后,它的內(nèi)容會被存儲在URLLoader實例的data屬性里,一般情況下無論外部文件是什么格式,都會被以raw text形似讀取,如果讀變量可能需要改一下dataFormat屬性

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

    可選值為:

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

    指定URLLoaderDataFormat.VARIABLES 作為 URLLoader的 dataFormat屬性, 被加載的數(shù)據(jù)將被當作一組變量,而不是字符串
    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已經(jīng)在那了一樣。( [exclaim] N神注:想引用原來主swf的root應(yīng)該用stage了)
    [最后編輯于 N神, at 2007-05-13 13:09:08]

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

    導航

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

    統(tǒng)計

    常用鏈接

    留言簿(6)

    隨筆分類

    隨筆檔案(17)

    文章分類(86)

    收藏夾(3)

    flex blog

    good site

    java blog

    my friend

    tools

    抓蝦

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲国产欧美国产综合一区 | 亚洲国产精品成人综合久久久 | 亚洲高清视频在线| 97在线观看永久免费视频| 亚洲最大在线观看| 亚洲精品动漫免费二区| 亚洲一本到无码av中文字幕| 麻豆成人精品国产免费| 免费视频成人国产精品网站| 国产亚洲欧洲Aⅴ综合一区 | 最近中文字幕无吗高清免费视频| 在线综合亚洲中文精品| 浮力影院第一页小视频国产在线观看免费| 91在线亚洲综合在线| 免费国产小视频在线观看| 一出一进一爽一粗一大视频免费的| 永久亚洲成a人片777777 | 一级毛片在线免费观看| 亚洲日韩国产精品乱-久| 亚洲AV永久无码精品一区二区国产 | 国产亚洲自拍一区| 久久久久久国产精品免费无码 | 一级一看免费完整版毛片| 亚洲av不卡一区二区三区 | 天天操夜夜操免费视频| 人妻无码中文字幕免费视频蜜桃| 亚洲AV无码专区国产乱码4SE | 1区1区3区4区产品亚洲 | 国产午夜亚洲精品理论片不卡| 2021精品国产品免费观看| 亚洲欧美aⅴ在线资源| 国产美女亚洲精品久久久综合| 精品国产免费人成电影在线观看| 相泽南亚洲一区二区在线播放| 国产成人亚洲精品青草天美| 毛片A级毛片免费播放| 精品国产污污免费网站| 亚洲精品无码少妇30P| 久久久久久亚洲精品中文字幕| 全免费a级毛片免费看无码| 国产成人无码区免费网站|