Flex 3教程中AS2和AS3可視元素的轉換
Flex3有很多值得學習的地方,本文和大家重點討論一下Flex 3教程中AS2和AS3可視元素的轉換,在AS3種,可視元素有很大的變化,在flash.display包中,包含了33個類/接口,比起AS2時代的MovieClip,Button,TextField等簡單幾個類來說,是復雜并強大了不少。
Flex 3教程中AS2和AS3可視元素的轉換
1.主要機制的變化
在AS3種,可視元素有很大的變化,在flash.display包中,包含了33個類/接口,比起AS2時代的MovieClip,Button,TextField等簡單幾個類來說,是復雜并強大了不少。(注:下面有的地方簡稱可視元素為元件)
AS3的可視元素使用方法和AS2不同,AS2時代,創建一個可視元素必須通過MovieClip.createEmptyMovie(),MovieClip.createTextField()方法來創建,不方便不說,更重要的是,一個元件從創建時,就被加到了舞臺上,從舞臺上移出后,這個元件就不可用了。而AS3中,你可用new來創建任何可視元素,在需要用的時候把它加到舞臺上,不用的時候移除下來,等到再用的時候,還可以再放上去就是。因此非常方便。由于這個特點,不同swf里面的元件可以相互使用了,比如你在swf1的library里面做了一個圖標,綁定的類是Icon1,你可以把swf1加載到swf2中,然后通過newIcon1()創建一個那個圖標,然后通過addChild()方法把它加到swf2的舞臺上。也許你已經意識到,我們再也不需要蹩腳的共享庫(SharedLibrary)了。
2.主要的可視元素類介紹
這里簡單介紹一下Flex 3教程中主要的可視元素,它們各自的特點和用途。
DisplayObject:所有可視元素都繼承自DisplayObject類,DisplayObject包含了一系列基本的屬性、方法和事件,比如坐標x,y,透明度alpha等,有好些屬性和方法和AS2的MovieClip/Button/TextField類似,但是有的是有區別的,比如alpha的取值范圍就不是0到100,而是0到1,在使用的時候注意查看文檔,不要犯小錯誤。
InteractiveObject:所有可交互的可視元素都繼承自InteractiveObject類,InteractiveObject包含了一系列可交互屬性、方法和事件,比如是否可點擊mouseEnabled,是否可Tab接收焦點tabEnabled等,InteractiveObject自身增加的屬性和方法不多,主要是交互事件上的增加。關于事件將在下一章講解。
Bitmap:表示一個位圖,可以和BitmapData很好的結合使用。
Shape:表示一個矢量圖型,可以用其graphics屬性代碼繪制圖形。
DisplayObjectContainer:可視元件的容器,可以在其中放置其他可視元件,Stage就是一個容器,所以可以向Stage中添加可視元素。DisplayObjectContainer繼承自InteractiveObject,但是不能直接構造它的實例。
Sprite:最常用的元件,他繼承自DisplayObjectContainer,所以通常用它來做容器或者用來實現可交互的元件。
MovieClip:繼承自Sprite,增加了時間軸(幀的設定)。這個類在AS2時代是使用最多的可視元件類型了,但是到了AS3,它被使用的頻率將會大大減少,因為通常很多元件是不需要時間軸的,Sprite基本上取代了它的重要位置。
Loader:加載器元件,你可以把可視內容(圖片,swf等)東西加載到它里面,然后把它放入舞臺上的容器里從而顯示出來,這比起AS2時代必須把東西加載到MovieClip要方便多了。
TextField:顯示/編輯文字的元件,它其實是在flash.text包里面的,由于也是非常重要的可視元素,所以這里一并講解。功能和AS2時代基本相同,在關于內容尺寸計算方面有一些增強,多了不少方法。鑒于AS3可視元素可以存在于舞臺之外的特點,TextField因此可以說功能大大增強,當你不使用一個TextField的時候,把它從舞臺上弄下來,他的各項屬性仍然保留著,下次加上舞臺的時候,完璧歸趙,無任何損失。
Stage:舞臺類。在AS2時代,Stage可控的東西不多,而AS3中,Stage其實就是一個DisplayObjectContainer,并且還擁有其他一些屬性和方法。功能很強大。當然,由于其特殊性,有的屬性和方法是不能使用的,詳見幫助文檔。
可視元素的繼承關系圖如下:
3.使用注意
Flex 3教程中在AS2中的全局變量_root已經不存在了,因此要給舞臺上添加內容,不是那么容易。每個DisplayObject都有一個root屬性,此屬性要在此元件被添加到舞臺上之后才有值,因此想直接通過root往舞臺上添加元件是不容易的。root屬性表示一個swf的根,如果你的影片只是一個swf,那么所有DisplayObject的root值除了null之外只可能是同一個值。但是如果你加載了另一個swf到影片里,那么就有了另一個root。
DisplayObject的stage屬性將會比較重要,stage表示flashplayer的播放舞臺,因此不管你的影片加載了多少個swf,所有的DisplayObject的stage屬性除了null都將是同一個值。stage屬性在一個DisplayObject被添加到舞臺上時被自動設置,從舞臺上移除后,自動歸null,因此,它也是指示一個元件是否在舞臺上的一個標志。
沒有了全局的root,并且stage也是被添加到舞臺后才被設置,那么如何往舞臺上添加元件呢。對于使用FlashIDE,制作的影片在播放的時候自動會被放置到舞臺上,因此通過它,間接就可以訪問到root和stage,因此就可以控制放置/移除到舞臺的操作了。對于使用Flex2編譯器的用戶,編譯的主文件/類必須是繼承自Sprite的類,生成的swf在播放時自動會創建一個那個主類的實例然后放置到舞臺上成為root,因此通過它,你也可以控制舞臺了。只是,可能用起來不如AS2中直接控制_root來的方便。
【編輯推薦】