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