ActionScript3(AS3)類庫學習之(十)——DisplayObject等顯示對象基類


一.顯示列表

 

使用AS3構建的每個應用程序都有一個由顯示對象構成的層次,這個層次稱為顯示列表,所有顯示對象如果想要顯示在Stage上則必須加入顯示列表中!其結構如下所示。

 

 

顯示列表中所有的顯示對象都必須繼承自DisplayObject, 所有包含其他DisplayObject的顯示對象都必須繼承自DisplayObjectContainer,所有能夠和鼠標鍵盤交互的顯示對象必須繼承自InteractiveObject, 下圖說明了這些核心顯示對象類的子類關系。

 

 

 

二.DisplayObject類

 

1.顯示列表路徑

Stage:一個Flash應用只有一個Stage,其上的所有DisplayObject的Stage屬性都會指向這個Stage,如果DisplayObject不在display list上,那么其Stage屬性為空。
root:獲取一個DisplayObject的根DisplayObject,一般是Main對象,對於Bitmap對象root是它自己,Stage的root是自己
parent:獲取包含DisplayObject的容器。
name:DisplayObject的名字,標示DisplayObject,用於利用getChildByName函數取得相應的DisplayObject

 

2.大小和位置

x,y:對象相對於其容器的坐標
width,height:對象的長寬,除了TextField和Video對象外,一個DisplayObject在沒有內容的時候長寬為0,且無法改變長寬。在有內容的時候,設置width,height的話,scaleX和scaleY會根據設置的長寬和DisplayObject中內容的長寬進行調整
getBounds(DisplayObject)獲取對象相對於給定對象的邊框矩形,包括對象線條所占用的額外空間
getRect(DisplayObject)獲取對象相對於給定對象的邊框矩形,不包括對象線條所占用的額外空間

 

3.縮放

scaleX,scaleY:設置X,Y的縮放,1代表100%
scale9Grid:設置縮放的區域,將整個DisplayObject分為9個區域,中間scale9Grid代表的區域正常縮放,四個邊角不縮放,左中和右中區域只縮放Y,中上和中下只縮放X
scrollRect:設置DisplayObject的scroll區域。在重新設置scrollRect的值后,整個坐標系統在重繪之后才有效。

 

4.坐標轉換和鼠標交互

localToGlobal(Point):局部坐標轉Stage坐標
globalToLocal(Point):Stage坐標轉局部坐標
local3DToGlobal(Vector3D):3D坐標轉Stage坐標
globalToLocal3D(Point):Stage坐標轉3D坐標
mouseX,mouseY表明鼠標或輸入設備的位置
hitTestPoint檢測點是否在對象上
hitTestObject檢測兩對象的邊框是否有交集

 

5.背景和可見性

visible:設置對象是否可見,如果對象不可見,那么它也是disable的。
alpha : 當alpha為0時,它會看不到,但是它是active的。
opaqueBackground:控制背景是否透明,如果為null則透明,如果給它顏色的值,則以該顏色作為背景,如果同時將cacheAsBitmap設為true能提高效率。
mask:遮罩,蒙版,被遮罩的顯示對象只在用作遮罩的顯示對象的全部不透明區域之內顯示。

 

6.顯示對象的復雜變換

rotation:表示 DisplayObject 實例距其原始方向的旋轉程度


Transform:詳見《ActionScript3(AS3)類庫學習之(七)——Transform二維平面轉換》


blendMode
用於控制一個對象如何繪制在背景上,注意:在該對象前面繪制的圖形圖像都將成為背景。

BlendMode.NORMAL    
完全遮擋效果。在顯示對象為透明的區域,背景是可見的。
BlendMode.LAYER    
不進行混合,只是強制進行緩沖。
BlendMode.MULTIPLY
將對象各顏色通道的值與背景各顏色通道的值相乘,然后通過除以 0xFF 進行標准化,從而得到較暗的顏色。此設置通常用於陰影和深度效果。
BlendMode.SCREEN
將顯示對象顏色的補色(反色)與背景顏色的補色相乘,會產生漂白效果。此設置通常用於產生加亮效果或用來刪除顯示對象的黑色區域。
注意:這種方法在黑色背景下是本色,在白色的背景下會是白色。
BlendMode.LIGHTEN
在顯示對象原色和背景顏色中選擇相對較亮的顏色(具有較大值的顏色)。此設置通常用於疊加類型。在 GPU 呈現下不支持。
注意:這種方法在黑色背景下是本色,在白色的背景下會是白色。
BlendMode.DARKEN
DARKEN    在顯示對象原色和背景顏色中選擇相對較暗的顏色(具有較小值的顏色)。此設置通常用於疊加類型。在 GPU 呈現下不支持。
注意:這種方法在黑色背景下是黑色,在白色的背景下會是本色。
BlendMode.DIFFERENCE
將顯示對象的原色與背景顏色進行比較,然后從較亮的原色值中減去較暗的原色值。此設置通常用於得到更明亮的顏色。
注意:這種方法在黑色背景下是本色,在白色的背景下會是反色。
BlendMode.ADD    
將顯示對象的原色值添加到它的背景顏色中,上限值為 0xFF。此設置通常用於使兩個對象間的加亮溶解產生動畫效果。
注意:這種方法在黑色背景下是本色,在白色的背景下會是白色。
BlendMode.SUBTRACT
從背景顏色的值中減去顯示對象原色的值,下限值為 0。此設置通常用於使兩個對象間的變暗溶解產生動畫效果。
注意:這種方法在黑色背景下是黑色,在白色的背景下會是反色。
BlendMode.INVERT
本身的顏色不起作用,只是對背景顏色求反色。
BlendMode.ALPHA    
將顯示對象的每個像素的 Alpha 值應用於背景。這要求將父顯示對象的 blendMode 設置為 BlendMode.LAYER。在 GPU 呈現下不支持。
BlendMode.ERASE
根據顯示對象的 Alpha 值擦除背景。這要求將父顯示對象的 blendMode 設置為 BlendMode.LAYER。在 GPU 呈現下不支持。
BlendMode.OVERLAY
根據背景的暗度調整每個像素的顏色。如果背景灰度值高於 50%,則顯示對象和背景顏色進行疊加,從而產生較亮的顏色。如果背景灰度值低於 50%,則顏色相乘,從而產生較暗的顏色。此設置通常用於獲得陰影效果。在 GPU 呈現下不支持。
BlendMode.HARDLIGHT
根據顯示對象的暗度調整每個像素的顏色。如果顯示對象灰度值高於 50%,則顯示對象和背景顏色進行疊加,從而產生較亮的顏色。如果顯示對象灰度值低於 50%,則顏色相乘,從而產生較暗的顏色。此設置通常用於獲得陰影效果。在 GPU 呈現下不支持。
BlendMode.SHADER
使用自定義着色器例程調整顏色。將使用的着色器指定為賦予 blendShader 屬性的 Shader 實例。如果將顯示對象的 blendShader 屬性設置為 Shader 實例,則會將顯示對象的 blendMode 屬性自動設置為 BlendMode.SHADER。如果在未首先設置 blendShader 屬性的情況下將 blendMode 屬性設置為 BlendMode.SHADER,則 blendMode 屬性會設置為 BlendMode.NORMAL。在 GPU 呈現下不支持。
blendShader
用來自定義一個着色器,定義方法暫放。

 

filters用來定義各種濾鏡效果,對一個對象可以同時存在多種濾鏡,這些濾鏡放在filters這個Array中,需要注意的是我們無法直接將新濾鏡對象添加到 filters 數組,也不能直接修改數組內濾鏡的屬性,而是需要新建臨時數組對象,進行想要做的操作,再賦值回去。
flash.filters 包中的多個類定義了可使用的特定濾鏡:

BitmapFilter:是所有圖像濾鏡效果的基類。無法直接使用
BevelFilter:用來添加斜角效果。可以用來做立體感的控件。
GradientBevelFilter:類似BevelFilter,對顯示對象應用漸變斜角效果。     
BlurFilter:模糊濾鏡,制作朦朧的感覺
ColorMatrixFilter:將 4 x 5 矩陣轉換應用於輸入圖像上的每個像素的 RGBA 顏色和 Alpha 值,以生成具有一組新的 RGBA 顏色和 Alpha 值的結果。這個有些類似於ColorTransform,但是比之更強大。
ConvolutionFilter:個人感覺這個是最強大的一個濾鏡,可以用作數字圖像處理,它利用卷積將輸入圖像的像素與相鄰的像素合並以生成圖像。通過卷積,可以實現大量的圖像效果,包括模糊、邊緣檢測、銳化、浮雕和斜角。
DisplacementMapFilter:制作扭曲的效果。
DropShadowFilter:向顯示對象添加投影,可產生陰影效果。
GlowFilter:對對象應用發光效果。
GradientGlowFilter:GlowFilter,對顯示對象應用漸變發光效果,可以使光有好幾層
ShaderFilter:通過自定義着色器來應用濾鏡。

 

7.緩存顯示對象

cacheAsBitmap
如果這個屬性為 true,則 Flash 運行時將緩存顯示對象的內部位圖表示形式。此緩存可以提高包含復雜矢量內容的顯示對象的性能。
如果設置了filter,則cacheAsBitmap 屬性自動設置為 true,且無法改為false。詳情見緩存顯示對象

 

8.其他

loaderInfo:加載信息,只對SWF的根DisplayObject和加載的Bitmap有用,可以監視加載情況
this.root.loaderInfo.addEventListener(Event.COMPLETE, func)
accessibilityProperties:用於為屏幕閱讀器提供輔助功能,不想開發相關功能可以不用管。

 

三.InteractiveObject

 

InteractiveObject 類是用戶可以使用鼠標、鍵盤或其他用戶輸入設備與之交互的所有顯示對象的抽象基類。不能直接實例化 InteractiveObject 類。

1.屬性

這個類主要是定義了DisplayObject的一些交互的性質:

doubleClickEnabled:指定此對象是否接收 doubleClick 事件。
mouseEnabled :指定此對象是否接收鼠標或其他用戶輸入、消息。
tabEnabled :指定此對象是否遵循 Tab 鍵順序。
focusRect : 指定此對象是否顯示焦點矩形。
tabIndex :指定 SWF 文件中的對象按 Tab 鍵順序排列。
contextMenu :指定與此對象相關聯的上下文菜單。

2.事件

鼠標,鍵盤的一些事件都是定義在這個類上面的。如果你希望能和鼠標,鍵盤交互,必須使用InteractiveObject的子類,而不是DisplayObject的子類。

 

 四.DisplayObjectContainer

 

 1.添加刪除子顯示對象

DisplayObjectContainer 類是可以包含子對象的所有對象的抽象基類, 無法直接對其進行實例化,它除了具有InteractiveObject具有的屬性和方法,主要是擴展了一些添加刪除子對象的方法。

numChildren:返回此對象的子項數目
contains():確定顯示對象是否是 DisplayObjectContainer 的子級。
addChild():添加子顯示對象。
addChildAt():將顯示對象添加到指定位置。
getChildByName():按名稱檢索顯示對象。
getChildIndex():返回顯示對象的索引位置。
getChildAt():返回位於指定索引處的子顯示對象。
setChildIndex():更改子顯示對象的位置。
removeChild():刪除指定的子對象。
removeChildAt():從指定位置刪除子對象。         
removeChildren(beginIndex:int = 0, endIndex:int = 0x7fffffff):刪除指定位置的多個子對象
swapChildren():交換兩個顯示對象的前后順序。
swapChildrenAt():交換兩個顯示對象的前后順序(由其索引值指定)。

DisplayObjecContainer本身的內容會顯示在最下方,也就是最先繪制,接着繪制子DisplayObject,先加入的子DisplayObject會先繪制。

2.其他

getObjectsUnderPoint(point:Point):
返回對象的數組,這些對象位於指定點下,並且是該 DisplayObjectContainer 實例的子項(或孫子項,依此類推)。
   

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM