套件 | flash.display |
類別 | public class DisplayObject |
繼承 | DisplayObject EventDispatcher Object |
實作 | IBitmapDrawable |
子類別 | AVM1Movie, Bitmap, InteractiveObject, MorphShape, Shape, StaticText, Video |
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
DisplayObject 類別支援像是物件 x 與 y 座標的基本功能,以及如物件變形矩陣的進階物件屬性。
DisplayObject 是抽象的基底類別,因此,您無法直接呼叫 DisplayObject。 叫用 new DisplayObject()
會擲出 ArgumentError
例外。
所有顯示物件都繼承自 DisplayObject 類別。
DisplayObject 類別本身並不包含任何用來在螢幕上呈現內容的 API。 基於此原因,如果您要建立 DisplayObject 類別的自訂子類別,就必須從具有能在螢幕上呈現內容之 API 的其中一個子類別加以擴充,例如 Shape、Sprite、Bitmap、SimpleButton、TextField 或 MovieClip 類別。
DisplayObject 類別包含數個廣播事件。任何特定事件的目標通常是特定的 DisplayObject 實體。例如,added
事件的目標就是已加入至顯示清單的特定 DisplayObject 實體。只有單一目標會將事件偵聽程式的置放方式限制在該目標 (在有些情況下為顯示清單上該目標的祖系)。不過,對於廣播事件,目標不是特定的 DisplayObject 實體,而是所有 DisplayObject 實體,包括不在顯示清單上的那些 DisplayObject 實體。這表示,您可以將偵聽程式加入至任何 DisplayObject 實體,以偵聽廣播事件。除了已列在 DisplayObject 類別的「事件」表格中的廣播事件之外,DisplayObject 類別還從 EventDispatcher 類別繼承兩個廣播事件:activate
和 deactivate
。
某些先前在 ActionScript 1.0 與 2.0 MovieClip、TextField 與 Button 類別 (例如 _alpha
、_height
、_name
、_width
、_x
、_y
和其它類別) 中使用的屬性,在 ActionScript 3.0 DisplayObject 類別中都有相等的類別,這些類別已經重新命名,不再以底線 (_) 字元開頭。
如需詳細資訊,請參閱「ActionScript 3.0 開發人員指南」中的「顯示程式設計」一章。
相關 API 元素
屬性 | 定義自 | ||
---|---|---|---|
accessibilityProperties : AccessibilityProperties
此顯示物件的目前輔助功能選項。 | DisplayObject | ||
alpha : Number
指出所指定物件的 Alpha 透明度值。 | DisplayObject | ||
blendMode : String
來自 BlendMode 類別的值,會指定要使用何種混合模式。 | DisplayObject | ||
blendShader : Shader [唯寫]
設定用來混合前景和背景的著色器。 | DisplayObject | ||
cacheAsBitmap : Boolean
如果設定為 true,Flash 執行階段會快取顯示物件的內部點陣圖表示法。 | DisplayObject | ||
cacheAsBitmapMatrix : Matrix
如果為非 null,當 cacheAsBitmap 設定為 true 時,這個 Matrix 物件會定義顯示物件的顯示方法。 | DisplayObject | ||
constructor : Object
類別物件的參照或是特定物件實體的建構函數。 | Object | ||
filters : Array
索引的陣列,其中包含目前和顯示物件相關的每個濾鏡物件。 | DisplayObject | ||
height : Number
會指出顯示物件的高度,以像素為單位。 | DisplayObject | ||
loaderInfo : LoaderInfo [唯讀]
會傳回 LoaderInfo 物件,其中包含關於載入此顯示物件所屬之檔案的資訊。 | DisplayObject | ||
mask : DisplayObject
呼叫之顯示物件會以指定的 mask 物件遮蓋。 | DisplayObject | ||
metaData : Object
如果中繼資料是透過 PlaceObject4 標籤與 SWF 檔案中的這個 DisplayObject 實體一同儲存,則會取得 DisplayObject 實體的中繼資料物件。 | DisplayObject | ||
mouseX : Number [唯讀]
指出滑鼠或使用者輸入裝置位置的 x 座標,以像素為單位。 | DisplayObject | ||
mouseY : Number [唯讀]
指出滑鼠或使用者輸入裝置位置的 y 座標,以像素為單位。 | DisplayObject | ||
name : String
指出 DisplayObject 的實體名稱。 | DisplayObject | ||
opaqueBackground : Object
會指定顯示物件是否不透明,並具有特定背景顏色。 | DisplayObject | ||
parent : DisplayObjectContainer [唯讀]
指出包含此顯示物件的 DisplayObjectContainer 物件。 | DisplayObject | ||
root : DisplayObject [唯讀]
對載入之 SWF 檔案的顯示物件而言,root 屬性就是該 SWF 檔案所呈現之顯示清單樹狀結構部分的最上層顯示物件。 | DisplayObject | ||
rotation : Number
指出 DisplayObject 實體的旋轉度數 (從該物件原本方向算起)。 | DisplayObject | ||
rotationX : Number
表示 DisplayObject 實體相對於 3D 父輩容器從原始方向旋轉的 x 軸旋轉 (以度數為單位)。 | DisplayObject | ||
rotationY : Number
表示 DisplayObject 實體相對於 3D 父輩容器從原始方向旋轉的 y 軸旋轉 (以度數為單位)。 | DisplayObject | ||
rotationZ : Number
表示 DisplayObject 實體相對於 3D 父輩容器從原始方向旋轉的 z 軸旋轉 (以度數為單位)。 | DisplayObject | ||
scale9Grid : Rectangle
目前產生效用的縮放格線。 | DisplayObject | ||
scaleX : Number
指出從註冊點套用的物件水平縮放 (百分比)。 | DisplayObject | ||
scaleY : Number
指出從物件註冊點套用的物件垂直縮放 (百分比)。 | DisplayObject | ||
scaleZ : Number
指出從物件註冊點套用的物件深度縮放 (百分比)。 | DisplayObject | ||
scrollRect : Rectangle
顯示物件的捲動矩形範圍。 | DisplayObject | ||
stage : Stage [唯讀]
顯示物件的「舞台」。 | DisplayObject | ||
transform : flash.geom:Transform
這是一個物件,具有和顯示物件的矩陣、顏色轉換和像素邊界有關的屬性。 | DisplayObject | ||
visible : Boolean
不管是否看得見顯示物件。 | DisplayObject | ||
width : Number
會指出顯示物件的寬度,以像素為單位。 | DisplayObject | ||
x : Number
指出 DisplayObject 實體相對於父輩 DisplayObjectContainer 之區域座標的 x 座標。 | DisplayObject | ||
y : Number
指出 DisplayObject 實體相對於父輩 DisplayObjectContainer 之區域座標的 y 座標。 | DisplayObject | ||
z : Number
表示 DisplayObject 實體相對於 3D 父輩容器的 z 座標位置 (沿著 z 軸)。 | DisplayObject |
方法 | 定義自 | ||
---|---|---|---|
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
會在 EventDispatcher 物件註冊事件偵聽程式,以便讓偵聽程式收到事件的通知。 | EventDispatcher | ||
會將事件傳送到事件流程。 | EventDispatcher | ||
傳回可定義顯示物件區域 (相對於 targetCoordinateSpace 物件的座標系統) 的矩形。 | DisplayObject | ||
根據 targetCoordinateSpace 參數所定義的座標系統,並排除形狀上的任何筆畫,傳回可定義顯示物件邊界的矩形。 | DisplayObject | ||
將 point 物件從「舞台」(全域) 座標轉換成顯示物件的 (區域) 座標。 | DisplayObject | ||
將二維點從「舞台」(全域) 座標轉換為三維顯示物件的 (區域) 座標。 | DisplayObject | ||
會檢查 EventDispatcher 物件是否有對特定的事件類型註冊偵聽程式。 | EventDispatcher | ||
指出物件是否有已定義的指定屬性。 | Object | ||
評估顯示物件的範圍框,看它是否與 obj 顯示物件的範圍框重疊或相交。 | DisplayObject | ||
評估顯示物件,看它是否與 x 和 y 參數所指定的點重疊或相交。 | DisplayObject | ||
指出 Object 類別的實體是否位於指定為參數的物件原型鏈中。 | Object | ||
將三維顯示物件的 (區域) 座標的三維點轉換為「舞台」(全域) 座標中的二維點。 | DisplayObject | ||
將 point 物件從顯示物件的 (區域) 座標轉換成「舞台」(全域) 座標。 | DisplayObject | ||
指出指定的屬性是否存在,以及是否可列舉。 | Object | ||
會從 EventDispatcher 物件移除偵聽程式。 | EventDispatcher | ||
為迴圈作業設定動態屬性的可用性。 | Object | ||
傳回代表此物件的字串,根據地區特定慣例進行格式化。 | Object | ||
會傳回指定之物件的字串形式。 | Object | ||
會傳回指定之物件的基本值。 | Object | ||
檢查此 EventDispatcher 物件是否已註冊事件偵聽程式,或者此物件的任何祖系已為特定事件類型註冊事件偵聽程式。 | EventDispatcher |
事件 | 摘要 | 定義自 | ||
---|---|---|---|---|
[廣播事件] 當 Flash Player 或 AIR 應用程式取得作業系統焦點並成為作用中時傳送。 | EventDispatcher | |||
當顯示物件加入顯示清單中時傳送。 | DisplayObject | |||
會在顯示物件加入舞台上的顯示清單時,以直接或是透過加入包含該顯示物件之子樹狀結構的方式傳送。 | DisplayObject | |||
[廣播事件] 當 Flash Player 或 AIR 應用程式失去作業系統焦點並成為非作用中時傳送。 | EventDispatcher | |||
[廣播事件] 當播放磁頭進入新影格時傳送。 | DisplayObject | |||
[廣播事件] 當播放磁頭結束目前影格時傳送。 | DisplayObject | |||
[廣播事件] 在影格顯示物件的建構函式執行之後,且影格指令碼執行之前傳送。 | DisplayObject | |||
會當顯示物件將要從顯示清單移除時傳送。 | DisplayObject | |||
會在顯示物件即將從顯示清單移除時,以直接或是透過移除包含該顯示物件之子樹狀結構的方式傳送。 | DisplayObject | |||
[廣播事件] 當顯示清單將要更新和顯示時傳送。 | DisplayObject |
accessibilityProperties | 屬性 |
accessibilityProperties:AccessibilityProperties
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9 |
此顯示物件的目前輔助功能選項。 如果您要修改 accessibilityProperties
屬性或 accessibilityProperties
中的任何欄位,必須呼叫 Accessibility.updateProperties()
方法,才能使變更生效。
注意:對於在 Flash 編寫環境中建立的物件而言,accessibilityProperties
的值會預先填入您在「輔助功能」面板中輸入與該物件相關的任何資訊。
實作
public function get accessibilityProperties():AccessibilityProperties
public function set accessibilityProperties(value:AccessibilityProperties):void
相關 API 元素
範例 ( 如何使用本範例 )
import flash.text.TextField; import flash.accessibility.AccessibilityProperties; import flash.accessibility.Accessibility; import flash.system.Capabilities; var tf:TextField = new TextField(); tf.text = "hello"; var accessProps:AccessibilityProperties = new AccessibilityProperties(); accessProps.name = "Greeting"; tf.accessibilityProperties = accessProps; if (Capabilities.hasAccessibility) { Accessibility.updateProperties(); } trace(tf.accessibilityProperties.name); // Greeting
alpha | 屬性 |
alpha:Number
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
指出所指定物件的 Alpha 透明度值。 有效值是 0 (完全透明) 到 1 (完全不透明)。 預設值為 1。alpha
設為 0 的顯示物件「都是」作用中的狀態,即使看不見它們亦然。
實作
public function get alpha():Number
public function set alpha(value:Number):void
範例 ( 如何使用本範例 )
alpha
屬性設定為 50% :
import flash.display.Sprite; import flash.events.MouseEvent; var circle:Sprite = new Sprite(); circle.graphics.beginFill(0xFF0000); circle.graphics.drawCircle(40, 40, 40); addChild(circle); circle.addEventListener(MouseEvent.MOUSE_OVER, dimObject); circle.addEventListener(MouseEvent.MOUSE_OUT, restoreObject); function dimObject(event:MouseEvent):void { event.target.alpha = 0.5; } function restoreObject(event:MouseEvent):void { event.target.alpha = 1.0; }
blendMode | 屬性 |
blendMode:String
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9 |
來自 BlendMode 類別的值,會指定要使用何種混合模式。 您可以使用兩種方式從內部繪製點陣圖。 如果您啟用了混合模式或外部剪裁遮色片,則將填滿點陣圖的方形加入至向量顯示即會繪製出點陣圖。 如果您嘗試將此屬性設為無效值,Flash 執行階段將此值設成 BlendMode.NORMAL
。
blendMode
屬性會影響顯示物件的每個像素。每一個像素都是由三原色 (紅、綠、藍) 所構成,而每一個原色都具有介於 0x00 和 0xFF 之間的值。 Flash Player 或 Adobe AIR 會將影片片段中像素的每一個原色拿來和背景中像素的相對應顏色做比較。例如,當 blendMode
設定為 BlendMode.LIGHTEN
時,Flash Player 或 Adobe AIR 會比較顯示物件的紅色值與背景的紅色值,然後使用兩個值中較明亮者做為顏色顯示的紅色組件值。
下表將說明 blendMode
設定。 BlendMode 類別會定義您可以使用的字串值。 下表中的圖例說明了套用到圓形顯示物件 (2) 的 blendMode
值,此圓形顯示物件疊在另一個顯示物件 (1) 上。
BlendMode Constant | 圖例 | 說明 |
---|---|---|
BlendMode.NORMAL | 顯示物件出現在背景前面。 顯示物件的像素值會覆寫背景的像素值。 只要顯示物件是透明的,就可以看見背景。 | |
BlendMode.LAYER | 強制建立顯示物件的透明度群組。 這表示顯示物件在進行後續處理前,已預先於暫存緩衝區中組成。 如果顯示物件使用點陣圖快取來預先快取處理,或者如果顯示物件是顯示物件容器 (其中包含帶有 blendMode 設定,而不是 BlendMode.NORMAL 設定的子物件),這項作業就會自動完成。在 GPU 顯示下不支援。
| |
BlendMode.MULTIPLY | 將顯示物件基本顏色的值乘以背景顏色的值,然後除以 0xFF 以進行一般化,得到比較暗的顏色。 這個設定通常用於陰影和深度效果。
例如,如果顯示物件中某個像素的某個基本顏色 (例如紅色) 以及背景像素的對應顏色都具有 0x88 的值,相乘的結果就是 0x4840。 除以 0xFF 則會得到該基本顏色 0x48 的值,這是比顯示物件或背景的顏色都還要暗的顏色。 | |
BlendMode.SCREEN | 將顯示物件的互補色 (反色) 乘以背景的互補色,便會產生漂白特效。 這個設定通常用於反白效果,或用於移除顯示物件的黑暗區域。 | |
BlendMode.LIGHTEN | 在顯示物件基本顏色和背景顏色中選取比較淡的顏色 (其值較大的顏色)。 此設定常用於疊加類型。
例如,如果顯示物件有一個 RGB 值是 0xFFCC33 的像素,且背景像素的 RGB 值為 0xDDF800,那麼顯示的像素的 RGB 值就是 0xFFF833 (因為 0xFF > 0xDD,0xCC < 0xF8,而 0x33 > 0x00 = 33)。在 GPU 顯示下不支援。 | |
BlendMode.DARKEN | 在顯示物件基本顏色和背景顏色中選取比較暗的顏色 (其值較小的顏色)。 此設定常用於疊加類型。
例如,如果顯示物件有一個 RGB 值是 0xFFCC33 的像素,且背景像素的 RGB 值為 0xDDF800,那麼顯示的像素的 RGB 值就是 0xDDCC00 (因為 0xFF > 0xDD,0xCC < 0xF8,而 0x33 > 0x00 = 33)。在 GPU 顯示下不支援。 | |
BlendMode.DIFFERENCE | 比較顯示物件基本顏色和背景顏色,然後將兩者中比較淡的顏色值減去比較暗的顏色值。 此設定常用於較鮮明的顏色。
例如,如果顯示物件有一個 RGB 值是 0xFFCC33 的像素,且背景像素的 RGB 值為 0xDDF800,那麼顯示的像素的 RGB 值就是 0x222C33 (因為 0xFF - 0xDD = 0x22,0xF8 - 0xCC = 0x2C,而 0x33 - 0x00 = 0x33)。 | |
BlendMode.ADD | 將顯示物件基本顏色的值加上背景顏色的值,最大只能套用 0xFF。 這個設定通常用於讓兩個物件之間變亮的溶解效果更加鮮活。
例如,如果顯示物件有一個 RGB 值是 0xAAA633 的像素,且背景像素的 RGB 值為 0xDD2200,那麼顯示的像素的 RGB 值就是 0xFFC833 (因為 0xAA + 0xDD > 0xFF,0xA6 + 0x22 = 0xC8,而 0x33 + 0x00 = 0x33)。 | |
BlendMode.SUBTRACT | 從背景顏色的值減去顯示物件基本顏色的值,最小只能套用 0。 這個設定通常用於讓兩個物件之間變暗的溶解效果更加鮮活。
例如,如果顯示物件有一個 RGB 值是 0xAA2233 的像素,且背景像素的 RGB 值為 0xDDA600,那麼顯示的像素的 RGB 值就是 0x338400 (因為 0xDD - 0xAA = 0x33,0xA6 - 0x22 = 0x84,而 0x00 - 0x33 < 0x00)。 | |
BlendMode.INVERT | 反轉背景。 | |
BlendMode.ALPHA | 將顯示物件中每個像素的 Alpha 值套用到背景。 您需要將父輩顯示物件的 blendMode 設定設為 BlendMode.LAYER 。 例如,在圖例中,父輩顯示物件是白色的背景,其設定為 blendMode = BlendMode.LAYER 。在 GPU 顯示下不支援。 | |
BlendMode.ERASE | 根據顯示物件的 Alpha 值擦除背景。 您需要將父輩顯示物件的 blendMode 設為 BlendMode.LAYER 。 例如,在圖例中,父輩顯示物件是白色的背景,其設定為 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 顯示下不支援。 |
實作
public function get blendMode():String
public function set blendMode(value:String):void
相關 API 元素
範例 ( 如何使用本範例 )
BlendMode.SUBTRACT
:
import flash.display.Sprite; import flash.display.BlendMode; import flash.events.MouseEvent; var square:Sprite = new Sprite(); square.graphics.beginFill(0xFF88CC); square.graphics.drawRect(0, 0, 80, 80); addChild(square); var circle:Sprite = new Sprite(); circle.graphics.beginFill(0xAA0022); circle.graphics.drawCircle(40, 40, 40); addChild(circle); circle.addEventListener(MouseEvent.MOUSE_OVER, dimObject); circle.addEventListener(MouseEvent.MOUSE_OUT, restoreObject); function dimObject(event:MouseEvent):void { event.target.blendMode = BlendMode.SUBTRACT; } function restoreObject(event:MouseEvent):void { event.target.blendMode = BlendMode.NORMAL; }
blendShader | 屬性 |
blendShader:Shader
[唯寫] 語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10, AIR 1.5 |
設定用來混合前景和背景的著色器。當 blendMode
屬性設為 BlendMode.SHADER
,指定的 Shader 可用來建立顯示物件的混合模式輸出。
將顯示物件的 blendShader
屬性設定為 Shader 實體會自動將顯示物件的 blendMode
屬性設為 BlendMode.SHADER
。如果設定了 blendShader
屬性 (此屬性會將 blendMode
屬性設為 BlendMode.SHADER
),則 blendMode
屬性的值會變更,而您只需將 blendMode
屬性設為 BlendMode.SHADER
,就能輕鬆地重設混合模式以便使用混合著色器。blendShader
屬性不需要再次重設,除非您需要變更用於混合模式的著色器。
指派給 blendShader
屬性的 Shader 至少必須指定 2 個 image4
輸入。此輸入「不」一定得使用關聯的 ShaderInput 物件之 input
屬性於程式碼中指定。背景顯示物件會自動用來當作第一個輸入 (包含 index
0 的輸入)。 前景顯示物件會用來當作第二個輸入 (包含 index
1 的輸入)。做為混合著色器使用的著色器可以指定 2 個以上的輸入。在此情況下,必須透過設定其 ShaderInput 實體的 input
屬性來指定任何其他輸入。
當您將 Shader 實體指派給此屬性時,著色器就會在內部複製。混合作業會使用該內部副本,而不是原始著色器的參考。任何對著色器的變更,例如變更參數值、輸入,或是位元組碼,都不會套用到用於混合模式上的著色器副本。
實作
public function set blendShader(value:Shader):void
擲回值
ArgumentError — 當著色器輸出類型與此作業不相容時 (著色器必須指定 pixel4 輸出)。
| |
ArgumentError — 當著色器指定少於兩個的影像輸入,或前兩個輸入不是 image4 輸入。
| |
ArgumentError — 當著色器已經指定尚未提供的影像輸入。
| |
ArgumentError — 當 ByteArray 或 Vector.<Number> 實體被當作輸入來使用,而且 ShaderInput 沒有指定 width 和 height 屬性,或指定的值與輸入物件中的資料量不符時。如需詳細資訊,請參閱 ShaderInput.input 屬性。
|
相關 API 元素
cacheAsBitmap | 屬性 |
cacheAsBitmap:Boolean
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
如果設定為 true
,Flash 執行階段會快取顯示物件的內部點陣圖表示法。這種快取可以增加含有複雜向量內容之顯示物件的執行效能。
已進行點陣圖快取之顯示物件中的所有向量資料都將繪製成點陣圖,而非主要顯示。 如果 cacheAsBitmapMatrix
為 null 或者不受支援,則點陣圖會複製到主要顯示畫面中變成未延伸、不旋轉的像素並貼齊最近的像素邊緣。像素和父物件是 1 比 1 對應。 如果變更點陣圖的邊界,會重新建立點陣圖而非延伸點陣圖。
如果 cacheAsBitmapMatrix
為非 null 並且受支援,則會使用該矩陣將物件繪製到螢幕範圍以外的點陣圖,而且會使用該顯示的延伸和/或旋轉的結果,以繪製物件至主要顯示畫面。
您必須先將 cacheAsBitmap
屬性設為 true
,才能建立內部點陣圖。
將顯示物件的 cacheAsBitmap
屬性設為 true
後,呈現方式並沒有改變,但顯示物件會自動執行像素貼齊。 在不同複雜程度的向量內容上,動畫速度都可以獲得明顯的提升。
只要將濾鏡套用到顯示物件 (若其 filter
陣列不是空的),cacheAsBitmap
屬性就會自動設為 true
;因此,如果顯示物件套用了濾鏡,則該顯示物件的 cacheAsBitmap
就會報告為 true
,即使已將屬性設定為 false
,亦是如此。 如果您將顯示物件的所有濾鏡清除,cacheAsBitmap
設定就會變更為上一次的設定。
在下列情況中,即使 cacheAsBitmap
屬性已設為 true
,且透過向量資料來呈現,顯示物件也不會使用點陣圖:
- 點陣圖太大。在 AIR 1.5 和 Flash Player 10 中,點陣圖影像的大小上限為 8,191 像素寬度或高度,且像素總計不得超過 16,777,215 像素 (因此,如果點陣圖影像的寬度為 8,191 像素,則其高度上限為 2,048 像素)。若為 Flash Player 9 和更早版本,高度與寬度的上限都是 2,880 像素。
- 配置點陣圖失敗 (記憶體不足的錯誤)。
cacheAsBitmap
屬性最適合與主要為靜態內容且不會經常縮放和旋轉的影片片段搭配使用。 對於這類影片片段,cacheAsBitmap
可以提升影片片段的轉移效能 (當它的 x 和 y 位置變更時)。
實作
public function get cacheAsBitmap():Boolean
public function set cacheAsBitmap(value:Boolean):void
相關 API 元素
範例 ( 如何使用本範例 )
cacheAsBitmap
屬性的值,在套用了濾鏡之後,此屬性會設為 true
:
import flash.display.Sprite; import flash.filters.DropShadowFilter var circle:Sprite = new Sprite(); circle.graphics.beginFill(0xAA0022); circle.graphics.drawCircle(40, 40, 40); addChild(circle); trace(circle.cacheAsBitmap); // false var filter:DropShadowFilter = new DropShadowFilter(); circle.filters = [filter]; trace(circle.cacheAsBitmap); // true
cacheAsBitmapMatrix | 屬性 |
cacheAsBitmapMatrix:Matrix
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 2.0 |
如果為非 null,當 cacheAsBitmap
設定為 true
時,這個 Matrix 物件會定義顯示物件的顯示方法。在呈現顯示物件的點陣圖版本時,應用程式會使用這個矩陣,做為所套用的變形矩陣。
AIR 描述檔支援:行動裝置支援此項功能,但桌上型電腦作業系統不支援。AIR for TV 裝置也提供有限的支援。更確切地說,AIR for TV 裝置支援變形,包括縮放與轉譯,但不包括旋轉與傾斜。如需有關跨多個描述檔之 API 支援的詳細資訊,請參閱 AIR 描述檔支援。
設定 cacheAsBitmapMatrix
之後,應用程式會保留各種不同 2D 變形的快取點陣圖影像,其中包括轉移、旋轉及縮放。如果應用程式使用硬體加速,此物件將儲存在視訊記憶體中做為紋理。這可讓 GPU 將支援的轉換套用至物件。GPU 執行這些變形的速度比 CPU 快。
若要使用硬體加速,請在 Flash Professional CS5 「iPhone 設定」對話方塊的「一般」索引標籤中,設定「顯示至 GPU」。或在應用程式描述器檔案中,將 renderMode
屬性設為 gpu
。請注意,若有硬體加速可供使用,AIR for TV 裝置會自動使用硬體加速。
例如,下列程式碼會將顯示物件尚未變形的點陣圖形式傳送至 GPU:
matrix:Matrix = new Matrix(); // creates an identity matrix mySprite.cacheAsBitmapMatrix = matrix; mySprite.cacheAsBitmap = true;
通常使用單位矩陣 (new Matrix()
) 就足夠了。不過,您可以使用其他矩陣 (例如縮小矩陣),來上傳不同的點陣圖至 GPU。例如,下列範例會套用 cacheAsBitmapMatrix
矩陣,這個矩陣在 x 軸與 y 軸都縮小 0.5 倍。GPU 使用的點陣圖物件較小,但 GPU 會調整它的大小,以符合顯示物件的 transform.matrix 屬性:
matrix:Matrix = new Matrix(); // creates an identity matrix matrix.scale(0.5, 0.5); // scales the matrix mySprite.cacheAsBitmapMatrix = matrix; mySprite.cacheAsBitmap = true;
一般而言,您應該選擇使用會將顯示物件變形為其將在應用程式中顯示之大小的矩陣。例如,如果您的應用程式會以縮小一半的大小,顯示 Sprite 的點陣圖,請使用會縮小一半的矩陣。如果您的應用程式會放大 Sprite 的現有大小,請使用會放大該倍數的矩陣。
注意:cacheAsBitmapMatrix
屬性適用於 2D 變形。如果您需要套用 3D 變形,可以設定該物件的 3D 屬性,並操作其 transform.matrix3D
屬性。如果使用 GPU 模式封裝應用程式,這允許 GPU 將 3D 變形套用至物件。3D 物件會忽略 cacheAsBitmapMatrix
。
實作
public function get cacheAsBitmapMatrix():Matrix
public function set cacheAsBitmapMatrix(value:Matrix):void
相關 API 元素
範例 ( 如何使用本範例 )
cacheAsBitmapMatrix
屬性,套用變形至影片片段 my_shape
的點陣圖版本。
import flash.geom.Matrix; import flash.display.*; import flash.utils.Timer; var my_shape:MovieClip = new MovieClip(); my_shape.graphics.beginFill(0xCCFF00); my_shape.graphics.drawRect(200, 0, 100, 100); addChild(my_shape); var my_timer:Timer = new Timer(250); my_timer.start(); my_timer.addEventListener(TimerEvent.TIMER, timerHandler); // make sure this Display Object remains cached for all 2D transforms my_shape.cacheAsBitmap = true; my_shape.cacheAsBitmapMatrix = new Matrix(); // rotation variables const initAngle:Number = 0; const pi:Number = 3.142; const incrAngle:Number = pi/10; // scaling variables const initScale:Number = 0.25; const incrScale: Number = 1.1; var initHeight : Number = my_shape.height; var initWidth : Number = my_shape.width; // translation variables var incrX : Number = root.width / 20; var incrY : Number = root.height / 10; // do some initial transforms var tempMat : Matrix = my_shape.transform.matrix; tempMat.rotate(initAngle); tempMat.scale(initScale, initScale); my_shape.transform.matrix = tempMat; function timerHandler(evt:TimerEvent):void { tempMat = my_shape.transform.matrix; tempMat.rotate(incrAngle); tempMat.translate(incrX, incrY); tempMat.scale(incrScale, incrScale); my_shape.transform.matrix = tempMat; // ensure we are still in a reasonable state or reset if(my_shape.height > stage.stageHeight/2) { my_shape.height = initHeight; } if(my_shape.width > stage.stageWidth/2) { my_shape.width = initWidth; } if(my_shape.x > stage.stageWidth) { my_shape.x = 0; } else if (my_shape.x < 0) { my_shape.x = stage.stageWidth; } if(my_shape.y > stage.stageHeight) { my_shape.y = 0; } else if (my_shape.y < 0) { my_shape.y = stage.stageHeight; } }
filters | 屬性 |
filters:Array
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9 |
索引的陣列,其中包含目前和顯示物件相關的每個濾鏡物件。 在 flash.filters 套件中包含的許多類別中已經定義了您可以使用的指定濾鏡。
您可以使用 ActionScript 程式碼在設計階段或執行階段將濾鏡套用到 Flash Professional。若要使用 ActionScript 套用濾鏡,必須先為整個 filters
陣列製作一個暫存副本、修改暫存陣列,然後再將暫存陣列的值指定給 filters
陣列。 您不可以直接將新的濾鏡物件加入至 filters
陣列。
若要使用 ActionScript 加入濾鏡,請依照下列步驟執行 (假設目標顯示物件名為 myDisplayObject
):
- 使用選定濾鏡類別的建構函式方法來建立新的濾鏡物件。
- 將
myDisplayObject.filters
陣列的值指定給暫存陣列,如名為myFilters
的陣列。 - 將新的濾鏡物件加入至
myFilters
暫存陣列。 - 將暫存陣列的值指定給
myDisplayObject.filters
陣列。
如果 filters
陣列為未定義,則不需要使用暫存陣列。 相反地,您可以直接指定陣列常值,其中包含一或多個已建立的濾鏡物件。 「範例」一節中的第一個範例會使用可以同時處理已定義與未定義之 filters
陣列的程式碼,來加入投影濾鏡。
若要修改現有的濾鏡物件,您必須使用修改 filters
陣列副本的技巧:
- 將
filters
陣列的值指定給暫存陣列,如名為myFilters
的陣列。 - 使用暫存陣列
myFilters
修改屬性。 例如,若要設定陣列中第一個濾鏡的 quality 屬性,可以使用下列程式碼:myFilters[0].quality = 1;
- 將暫存陣列的值指定給
filters
陣列。
如果顯示物件在載入階段已經有關聯的濾鏡,便會標記這個顯示物件,將它當做透明點陣圖進行快取處理。 因此,只要顯示物件包含有效的濾鏡清單,播放程式就會快取顯示物件當做點陣圖。 這個來源點陣圖會當做濾鏡效果的來源影像。 每個顯示物件通常擁有兩個點陣圖: 其中一個是原始、未經濾鏡處理的來源顯示物件,另一個是經過濾鏡處理後的最終影像。 顯示影像時是使用最終影像。 只要不變更顯示物件,就不需要更新最終影像。
flash.filters 套件包含濾鏡可用的類別。 例如,若要建立 DropShadow 濾鏡,您可以撰寫:
import flash.filters.DropShadowFilter var myFilter:DropShadowFilter = new DropShadowFilter (distance, angle, color, alpha, blurX, blurY, quality, inner, knockout)
您可以使用 is
運算子,判斷指定給位於 filter
陣列中每個索引位置的濾鏡類型。 例如,下列程式碼說明如何判斷 filters
陣列中第一個濾鏡為 DropShadowFilter 的位置:
import flash.text.TextField; import flash.filters.*; var tf:TextField = new TextField(); var filter1:DropShadowFilter = new DropShadowFilter(); var filter2:GradientGlowFilter = new GradientGlowFilter(); tf.filters = [filter1, filter2]; tf.text = "DropShadow index: " + filterPosition(tf, DropShadowFilter).toString(); // 0 addChild(tf) function filterPosition(displayObject:DisplayObject, filterClass:Class):int { for (var i:uint = 0; i < displayObject.filters.length; i++) { if (displayObject.filters[i] is filterClass) { return i; } } return -1; }
注意:因為您無法直接將新的濾鏡物件加入至 DisplayObject.filters
陣列,所以下列程式碼對目標顯示物件 (名為 myDisplayObject
) 沒有任何作用:
myDisplayObject.filters.push(myDropShadow);
實作
public function get filters():Array
public function set filters(value:Array):void
擲回值
ArgumentError — 當 filters 包含 ShaderFilter,而著色器輸出類型與此作業不相容時 (著色器必須指定 pixel4 輸出)。
| |
ArgumentError — 當 filters 包含 ShaderFilter,而著色器未指定任何影像輸入,或第一個輸入不是 image4 輸入。
| |
ArgumentError — 當 filters 包含 ShaderFilter,而著色器已經指定尚未提供的影像輸入時。
| |
ArgumentError — 當 filters 包含 ShaderFilter、ByteArray 或是 Vector 時。<Number> 實體會被當做著色器輸入來使用,而且未替 ShaderInput 物件設定 width 和 height 屬性,或者指定的值不符合輸入資料中的資料總數。如需詳細資訊,請參閱 ShaderInput.input 屬性。
|
相關 API 元素
height | 屬性 |
height:Number
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
會指出顯示物件的高度,以像素為單位。此高度是根據顯示物件內容的範圍計算而得。 當您設定 height
屬性時,scaleY
屬性也會相應調整,如下列程式碼所示:
var rect:Shape = new Shape(); rect.graphics.beginFill(0xFF0000); rect.graphics.drawRect(0, 0, 100, 100); trace(rect.scaleY) // 1; rect.height = 200; trace(rect.scaleY) // 2;
除了 TextField 和 Video 物件,無內容的顯示物件 (例如,空的 Sprite) 的高度為 0,即使您嘗試將 height
設定為其它值也是如此。
實作
public function get height():Number
public function set height(value:Number):void
範例 ( 如何使用本範例 )
height
屬性 (根據每個物件的 textHeight
屬性來調整);而且也會藉由設定第二個文字欄位的 y
屬性來放置該文字欄位。
import flash.text.TextField; var tf1:TextField = new TextField(); tf1.text = "Text Field 1"; tf1.border = true; tf1.wordWrap = true; tf1.width = 40; tf1.height = tf1.textHeight + 5; addChild(tf1); var tf2:TextField = new TextField(); tf2.text = "Text Field 2"; tf2.border = true; tf2.wordWrap = true; tf2.width = 40; tf2.height = tf2.textHeight + 5; tf2.y = tf1.y + tf1.height + 5; addChild(tf2);
loaderInfo | 屬性 |
loaderInfo:LoaderInfo
[唯讀] 語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
會傳回 LoaderInfo 物件,其中包含關於載入此顯示物件所屬之檔案的資訊。 只有 SWF 檔案的根顯示物件,或載入的 Bitmap (並非使用 ActionScript 繪製的 Bitmap) 會定義 loaderInfo
屬性。 若要尋找與 SWF 檔案關聯,且包含名為 myDisplayObject
的顯示物件的 loaderInfo
物件,請使用 myDisplayObject.root.loaderInfo
。
大型的 SWF 檔案可以呼叫 this.root.loaderInfo.addEventListener(Event.COMPLETE, func)
來監視自己的下載。
實作
public function get loaderInfo():LoaderInfo
相關 API 元素
範例 ( 如何使用本範例 )
this
參照顯示物件。 此程式碼會輸出顯示物件之根 SWF 檔案的 URL:
trace (this.loaderInfo.url);
mask | 屬性 |
mask:DisplayObject
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
指定的 mask
物件會遮蓋呼叫的顯示物件。 為了確保縮放舞台時也能呈現出遮蓋效果,顯示清單中的 mask
顯示物件必須為作用中。 尚未繪製 mask
物件本身。 請將 mask
設定為 null
以移除遮色片。
若要縮放遮色片物件,此物件必須位於顯示清單中。 若要拖曳遮色片 Sprite 物件 (藉由呼叫它的 startDrag()
方法),此物件必須位於顯示清單中。 若要根據 Sprite 所傳送的 mouseDown
事件來呼叫 Sprite 遮色片的 startDrag()
方法,請將 Sprite 的 buttonMode
屬性設為 true
。
藉由將 cacheAsBitmap
屬性設定為 true
,以及將 cacheAsBitmapMatrix
屬性設定為 Matrix 物件來快取顯示物件時,遮色片和被遮色的顯示物件都必須是相同快取點陣圖的一部份。因此,如果快取顯示物件,遮色片就必須是顯示物件的子系。如果快取顯示清單上顯示物件的祖系,遮色片就必須是該祖系的子系,或該祖系的後代之一。如果快取一個以上被遮色物件的祖系,遮色片則必須是最接近顯示清單中被遮色物件之快取容器的後代。
注意:您無法使用單一 mask
物件來遮色處理多個呼叫的顯示物件。當此 mask
指定給第二個顯示物件時,它就會遭移除,不再成為第一個物件的遮色片,而且該物件的 mask
屬性會成為 null
。
實作
public function get mask():DisplayObject
public function set mask(value:DisplayObject):void
範例 ( 如何使用本範例 )
drag()
事件偵聽程式函數會呼叫遮色片 Sprite 物件的 startDrag()
方法:
import flash.text.TextField; import flash.display.Sprite; import flash.events.MouseEvent; var tf:TextField = new TextField(); tf.text = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, " + "sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. " tf.selectable = false; tf.wordWrap = true; tf.width = 150; addChild(tf); var square:Sprite = new Sprite(); square.graphics.beginFill(0xFF0000); square.graphics.drawRect(0, 0, 40, 40); addChild(square); tf.mask = square; tf.addEventListener(MouseEvent.MOUSE_DOWN, drag); tf.addEventListener(MouseEvent.MOUSE_UP, noDrag); function drag(event:MouseEvent):void { square.startDrag(); } function noDrag(event:MouseEvent):void { square.stopDrag(); }
metaData | 屬性 |
mouseX | 屬性 |
mouseX:Number
[唯讀] 語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
指出滑鼠或使用者輸入裝置位置的 x 座標,以像素為單位。
注意:對於旋轉過的 DisplayObject,傳回的 x 座標會反映未旋轉的物件。
實作
public function get mouseX():Number
範例 ( 如何使用本範例 )
mouseX
和 mouseY
位置:
import flash.display.Sprite; import flash.events.MouseEvent; var square:Sprite = new Sprite(); square.graphics.beginFill(0xFF0000); square.graphics.drawRect(0, 0, 200, 200); addChild(square); square.addEventListener(MouseEvent.CLICK, traceCoordinates); function traceCoordinates(event:MouseEvent):void { trace(square.mouseX, square.mouseY); }
mouseY | 屬性 |
mouseY:Number
[唯讀] 語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
指出滑鼠或使用者輸入裝置位置的 y 座標,以像素為單位。
注意:對於旋轉過的 DisplayObject,傳回的 y 座標會反映未旋轉的物件。
實作
public function get mouseY():Number
範例 ( 如何使用本範例 )
mouseX
和 mouseY
位置:
import flash.display.Sprite; import flash.events.MouseEvent; var square:Sprite = new Sprite(); square.graphics.beginFill(0xFF0000); square.graphics.drawRect(0, 0, 200, 200); addChild(square); square.addEventListener(MouseEvent.CLICK, traceCoordinates); function traceCoordinates(event:MouseEvent):void { trace(square.mouseX, square.mouseY); }
name | 屬性 |
name:String
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
指出 DisplayObject 的實體名稱。 您可以呼叫顯示物件容器的 getChildByName()
方法,在父輩顯示物件容器的子清單中識別出此物件。
實作
public function get name():String
public function set name(value:String):void
擲回值
IllegalOperationError — 前提是,您嘗試使用 Flash 編寫工具為時間軸上的物件設定這個屬性。
|
範例 ( 如何使用本範例 )
name
屬性:
import flash.display.Sprite; import flash.events.MouseEvent; var circle1:Sprite = new Sprite(); circle1.graphics.beginFill(0xFF0000); circle1.graphics.drawCircle(40, 40, 40); circle1.name = "circle1"; addChild(circle1); circle1.addEventListener(MouseEvent.CLICK, traceName); var circle2:Sprite = new Sprite(); circle2.graphics.beginFill(0x0000FF); circle2.graphics.drawCircle(140, 40, 40); circle2.name = "circle2"; addChild(circle2); circle2.addEventListener(MouseEvent.CLICK, traceName); function traceName(event:MouseEvent):void { trace(event.target.name); }
opaqueBackground | 屬性 |
opaqueBackground:Object
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
會指定顯示物件是否不透明,並具有特定背景顏色。 透明的點陣圖包含 Alpha 色版資料,且會繪製成透明狀。 不透明的點陣圖沒有 Alpha 色版 (呈現的速度比透明點陣圖還快)。 如果點陣圖是不透明的,您就可以指定要使用的自身背景顏色。
如果設為數值,則表面會使用數值所指定的 RGB 背景顏色來呈現不透明狀。 如果設為 null
(預設值),則顯示物件會具有透明的背景。
opaqueBackground
屬性主要用途即為與 cacheAsBitmap
屬性搭配使用,以呈現最佳化效果。 在 cacheAsBitmap
屬性已設為 true 的顯示物件上,設定 opaqueBackground
可以增進顯示效能。
呼叫 hitTestPoint()
方法時,如果 shapeFlag
參數設為 true
,則「無法」配合不透明背景區域使用。
不透明背景區域不會回應滑鼠事件。
實作
public function get opaqueBackground():Object
public function set opaqueBackground(value:Object):void
相關 API 元素
範例 ( 如何使用本範例 )
opaqueBackground
屬性設定為紅 (0xFF0000):
import flash.display.Shape; var circle:Shape = new Shape(); circle.graphics.beginFill(0x0000FF); circle.graphics.drawCircle(40, 40, 40); circle.opaqueBackground = 0xFF0000; addChild(circle);
parent | 屬性 |
parent:DisplayObjectContainer
[唯讀] 語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
指出包含此顯示物件的 DisplayObjectContainer 物件。 請使用 parent
屬性來指定相對路徑,以便顯示位於顯示清單階層中目前顯示物件之上的物件。
您可以使用 parent
在顯示清單中向上移動多個階層,如下列所示:
this.parent.parent.alpha = 20;
實作
public function get parent():DisplayObjectContainer
擲回值
SecurityError — 父輩顯示物件屬於您無法存取的安全執行程序。 您可以讓父影片呼叫 Security.allowDomain() 方法來避免發生這個情形。
|
範例 ( 如何使用本範例 )
parent
屬性如何反映顯示清單階層:
import flash.display.Sprite; var sprite1:Sprite = new Sprite(); sprite1.name = "sprite1"; var sprite2:Sprite = new Sprite(); sprite2.name = "sprite2"; var sprite3:Sprite = new Sprite(); sprite3.name = "sprite3"; sprite1.addChild(sprite2); sprite2.addChild(sprite3); trace(sprite2.parent.name); // sprite1 trace(sprite3.parent.name); // sprite2 trace(sprite3.parent.parent.name); // sprite1
root | 屬性 |
root:DisplayObject
[唯讀] 語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
對載入之 SWF 檔案的顯示物件而言,root
屬性就是該 SWF 檔案所呈現之顯示清單樹狀結構部分的最上層顯示物件。 以呈現出載入之影像檔的 Bitmap 物件而言,root
屬性是 Bitmap 物件本身。 以第一個載入的 SWF 檔案的主要類別實體而言,root
屬性就是顯示物件本身。 Stage 物件的 root
屬性即為 Stage 物件本身。 對於任何尚未加入顯示清單的顯示物件,root
屬性都是設為 null
,除非加入的顯示物件容器已經從顯示清單中移除,但仍是載入的 SWF 檔案中最上層顯示物件的子物件。
例如,如果您藉由呼叫 Sprite()
建構函式方法來建立新的 Sprite 物件,在您將它加入顯示清單 (或者加入已從顯示清單中移除,但仍是 SWF 檔案最上層顯示物件之子物件的顯示物件容器中) 之前,它的 root
屬性一直都是 null
。
對於載入的 SWF 檔案而言,儘管用來載入檔案的 Loader 物件可能已不在顯示清單上,SWF 檔案中的最上層顯示物件還是為將它的 root
屬性設為自己。 除非將 Loader 物件加入做為已設定 root
屬性之顯示物件的子物件,否則 Loader 無法設定它的 root
屬性。
實作
public function get root():DisplayObject
範例 ( 如何使用本範例 )
root
屬性對於 Stage 物件、尚未載入 (加入至顯示清單之前及之後) 的顯示物件 (Loader 物件),以及已載入的物件 (已載入的 Bitmap 物件) 之間的差異:
import flash.display.Loader; import flash.net.URLRequest; import flash.events.Event; trace(stage.root); // [object Stage] var ldr:Loader = new Loader(); trace (ldr.root); // null addChild(ldr); trace (ldr.root); // [object ...] var urlReq:URLRequest = new URLRequest("example.jpg"); ldr.load(urlReq); ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, loaded); function loaded(event:Event):void { trace(ldr.content.root); // [object Bitmap] }
rotation | 屬性 |
rotation:Number
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
指出 DisplayObject 實體的旋轉度數 (從該物件原本方向算起)。 0 至 180 之間的數值代表順時針方向旋轉;0 至 -180 之間的數值代表逆時針方向旋轉。超過此範圍的數值會被加上或減去 360 的倍數,以獲得該範圍之內的數值。 例如,my_video.rotation = 450
陳述式會與 my_video.rotation = 90
相同。
實作
public function get rotation():Number
public function set rotation(value:Number):void
範例 ( 如何使用本範例 )
import flash.display.Sprite; import flash.events.MouseEvent; var square:Sprite = new Sprite(); square.graphics.beginFill(0xFFCC00); square.graphics.drawRect(-50, -50, 100, 100); square.x = 150; square.y = 150; addChild(square); square.addEventListener(MouseEvent.CLICK, rotate); function rotate(event:MouseEvent):void { square.rotation += 15; }
rotationX | 屬性 |
rotationX:Number
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10, AIR 1.5, Flash Lite 4 |
表示 DisplayObject 實體相對於 3D 父輩容器從原始方向旋轉的 x 軸旋轉 (以度數為單位)。0 至 180 之間的數值代表順時針方向旋轉;0 至 -180 之間的數值代表逆時針方向旋轉。超過此範圍的數值會被加上或減去 360 的倍數,以獲得該範圍之內的數值。
實作
public function get rotationX():Number
public function set rotationX(value:Number):void
範例 ( 如何使用本範例 )
rotationX
和 rotationY
屬性來旋轉。第一個橢圓形的註冊點設定為其中心。它會自轉。第二個橢圓形會繞著外部的點旋轉。
package { import flash.display.MovieClip; import flash.display.Shape; import flash.geom.*; import flash.display.Graphics; import flash.events.TimerEvent; import flash.utils.Timer; public class RotationExample1 extends MovieClip { private var ellipse:Shape = new Shape(); private var speed:int = 10; private var ellipse1:Shape; private var ellipse2:Shape; public function RotationExample1():void { ellipse1 = drawEllipse(-50, -40, (this.stage.stageWidth / 2), (this.stage.stageHeight / 2)); ellipse2 = drawEllipse(30, 40, (this.stage.stageWidth / 2), (this.stage.stageHeight / 2)); this.addChild(ellipse1); this.addChild(ellipse2); var t:Timer = new Timer(50); t.addEventListener(TimerEvent.TIMER, timerHandler); t.start(); } private function drawEllipse(x1, y1, x2, y2):Shape { var e:Shape = new Shape(); e.graphics.beginFill(0xFF0000); e.graphics.lineStyle(2); e.graphics.drawEllipse(x1, y1, 100, 80); e.graphics.endFill(); e.x = x2; e.y = y2; e.z = 1; return e; } private function timerHandler(event:TimerEvent):void { ellipse1.rotationY += speed; ellipse1.rotationX -= speed; ellipse2.rotationY += speed; ellipse2.rotationX -= speed; } } }
//Requires: // - Slider control UI component in Flash library. // - Publish for Flash Player 10. // [SWF(width="400", height="300")] import fl.controls.Slider; import fl.controls.SliderDirection; import fl.events.SliderEvent; var slider:Slider = new Slider(); slider.direction = SliderDirection.HORIZONTAL; slider.minimum = 0; slider.maximum = 360; slider.value = 45; slider.tickInterval = 45; slider.snapInterval = 1; slider.liveDragging = true; slider.addEventListener(SliderEvent.CHANGE, slider_change); slider.move(10, 10); addChild(slider); var spr:Sprite = new Sprite(); spr.graphics.lineStyle(2, 0xFF0000); spr.graphics.drawRect(0, 0, 100, 80); spr.x = Math.round((stage.stageWidth - spr.width)/2); spr.y = Math.round((stage.stageHeight - spr.height)/2); spr.rotationX = 45; addChild(spr); function slider_change(evt:SliderEvent):void { spr.rotationX = evt.value; }
rotationY | 屬性 |
rotationY:Number
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10, AIR 1.5, Flash Lite 4 |
表示 DisplayObject 實體相對於 3D 父輩容器從原始方向旋轉的 y 軸旋轉 (以度數為單位)。0 至 180 之間的數值代表順時針方向旋轉;0 至 -180 之間的數值代表逆時針方向旋轉。超過此範圍的數值會被加上或減去 360 的倍數,以獲得該範圍之內的數值。
實作
public function get rotationY():Number
public function set rotationY(value:Number):void
範例 ( 如何使用本範例 )
rotationX
和 rotationY
屬性來旋轉。第一個橢圓形的註冊點設定為其中心。它會自轉。第二個橢圓形會繞著外部的點旋轉。
package { import flash.display.MovieClip; import flash.display.Shape; import flash.geom.*; import flash.display.Graphics; import flash.events.TimerEvent; import flash.utils.Timer; public class RotationExample1 extends MovieClip { private var ellipse:Shape = new Shape(); private var speed:int = 10; private var ellipse1:Shape; private var ellipse2:Shape; public function RotationExample1():void { ellipse1 = drawEllipse(-50, -40, (this.stage.stageWidth / 2), (this.stage.stageHeight / 2)); ellipse2 = drawEllipse(30, 40, (this.stage.stageWidth / 2), (this.stage.stageHeight / 2)); this.addChild(ellipse1); this.addChild(ellipse2); var t:Timer = new Timer(50); t.addEventListener(TimerEvent.TIMER, timerHandler); t.start(); } private function drawEllipse(x1, y1, x2, y2):Shape { var e:Shape = new Shape(); e.graphics.beginFill(0xFF0000); e.graphics.lineStyle(2); e.graphics.drawEllipse(x1, y1, 100, 80); e.graphics.endFill(); e.x = x2; e.y = y2; e.z = 1; return e; } private function timerHandler(event:TimerEvent):void { ellipse1.rotationY += speed; ellipse1.rotationX -= speed; ellipse2.rotationY += speed; ellipse2.rotationX -= speed; } } }
rotationZ | 屬性 |
rotationZ:Number
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10, AIR 1.5, Flash Lite 4 |
表示 DisplayObject 實體相對於 3D 父輩容器從原始方向旋轉的 z 軸旋轉 (以度數為單位)。0 至 180 之間的數值代表順時針方向旋轉;0 至 -180 之間的數值代表逆時針方向旋轉。超過此範圍的數值會被加上或減去 360 的倍數,以獲得該範圍之內的數值。
實作
public function get rotationZ():Number
public function set rotationZ(value:Number):void
scale9Grid | 屬性 |
scale9Grid:Rectangle
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
目前產生效用的縮放格線。 如果設定為 null
,套用任何縮放變形時,整個顯示物件將會正常縮放。
當您定義 scale9Grid
屬性時,顯示物件會根據定義的格線中心區域的 scale9Grid
矩形,分割成含有九個區域的格線。 其它八個格線區域則分佈在下列區域:
- 矩形外左上角的區域
- 矩形上方的區域
- 矩形外右上角的區域
- 矩形左方的區域
- 矩形右方的區域
- 矩形外左下角的區域
- 矩形下方的區域
- 矩形外右下角的區域
您可以將中央區域 (由矩形定義) 以外的八個區域當做顯示物件縮放時套用特殊規則的圖片頁框。
當 scale9Grid
屬性已設定且顯示物件已縮放,所有文字和漸層都會正常縮放;然而,其它類型的物件適用下列規則:
- 中心區域的內容會正常縮放。
- 不會縮放角落的內容。
- 上下區域的內容只會水平縮放。 左右區域的內容只會垂直縮放。
- 所有填色 (包括點陣圖、視訊和漸層) 都將延伸以符合區域的形狀。
如果顯示物件已經旋轉,所有的後續縮放都會正常 (且忽略 scale9Grid
屬性)。
例如,假設有下列的顯示物件以及一個已套用顯示物件之 scale9Grid
的矩形:
顯示物件。 |
紅色矩形會顯示 |
當縮放或延伸顯示物件後,矩形內的物件可以正常地縮放,但矩形外的物件則依據 scale9Grid
規則進行縮放:
縮放為 75%: | |
縮放為 50%: | |
縮放為 25%: | |
水平延伸 150%: |
設定 scale9Grid
一般是用於設定當作組件使用的顯示物件,其中邊緣區域在縮放組件後仍會保留相同的寬度。
實作
public function get scale9Grid():Rectangle
public function set scale9Grid(value:Rectangle):void
擲回值
ArgumentError — 前提是,您將無效的引數傳遞至方法。
|
相關 API 元素
範例 ( 如何使用本範例 )
graphics
屬性繪製矩形。 此矩形的邊框為 20 像素寬的線條,並使用漸層加以填色。 計時器事件會呼叫 scale()
函數,藉由調整 scaleX
和 scaleY
屬性來縮放 Shape 物件。 套用到 Shape 物件的 scale9Grid
會避免縮放此矩形的邊框線條,而且只會縮放漸層填色:
import flash.display.Shape; import flash.display.GradientType; import flash.display.SpreadMethod; import flash.display.InterpolationMethod; import flash.geom.Matrix; import flash.geom.Rectangle; import flash.utils.Timer; import flash.events.TimerEvent; var square:Shape = new Shape(); square.graphics.lineStyle(20, 0xFFCC00); var gradientMatrix:Matrix = new Matrix(); gradientMatrix.createGradientBox(15, 15, Math.PI, 10, 10); square.graphics.beginGradientFill(GradientType.RADIAL, [0xffff00, 0x0000ff], [100, 100], [0, 0xFF], gradientMatrix, SpreadMethod.REFLECT, InterpolationMethod.RGB, 0.9); square.graphics.drawRect(0, 0, 100, 100); var grid:Rectangle = new Rectangle(20, 20, 60, 60); square.scale9Grid = grid ; addChild(square); var tim:Timer = new Timer(100); tim.start(); tim.addEventListener(TimerEvent.TIMER, scale); var scaleFactor:Number = 1.01; function scale(event:TimerEvent):void { square.scaleX *= scaleFactor; square.scaleY *= scaleFactor; if (square.scaleX > 2.0) { scaleFactor = 0.99; } if (square.scaleX < 1.0) { scaleFactor = 1.01; } }
scaleX | 屬性 |
scaleX:Number
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
指出從註冊點套用的物件水平縮放 (百分比)。預設的註冊點是 (0,0)。 1.0 等於 100% 縮放。
縮放區域座標系統會變更以完整像素為單位所定義的 x
和 y
屬性值。
實作
public function get scaleX():Number
public function set scaleX(value:Number):void
範例 ( 如何使用本範例 )
graphics
屬性繪製矩形。 當使用者按下 sprite,會依 10% 的比例縮放:
import flash.display.Sprite; import flash.events.MouseEvent; var square:Sprite = new Sprite(); square.graphics.beginFill(0xFFCC00); square.graphics.drawRect(0, 0, 100, 100); addChild(square); square.addEventListener(MouseEvent.CLICK, scale); function scale(event:MouseEvent):void { square.scaleX *= 1.10; square.scaleY *= 1.10; }
scaleY | 屬性 |
scaleY:Number
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
指出從物件註冊點套用的物件垂直縮放 (百分比)。預設的註冊點是 (0,0)。 1.0 等於 100% 縮放。
縮放區域座標系統會變更以完整像素為單位所定義的 x
和 y
屬性值。
實作
public function get scaleY():Number
public function set scaleY(value:Number):void
範例 ( 如何使用本範例 )
graphics
屬性繪製矩形。 當使用者按下 sprite,會依 10% 的比例縮放:
import flash.display.Sprite; import flash.events.MouseEvent; var square:Sprite = new Sprite(); square.graphics.beginFill(0xFFCC00); square.graphics.drawRect(0, 0, 100, 100); addChild(square); square.addEventListener(MouseEvent.CLICK, scale); function scale(event:MouseEvent):void { square.scaleX *= 1.10; square.scaleY *= 1.10; }
scaleZ | 屬性 |
scrollRect | 屬性 |
scrollRect:Rectangle
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9 |
顯示物件的捲動矩形範圍。 顯示物件會裁剪至矩形所定義的尺寸,並在您變更 scrollRect
物件的 x
和 y
屬性時,於矩形內捲動。
scrollRect
Rectangle 物件的屬性採用顯示物件的座標空間,縮放的方式和整體顯示物件一樣。 在捲動中顯示物件之裁切視窗的角落邊界是位於顯示物件的原點 (0,0),以及矩形寬度與高度所定義的點。 這些點並不以原點為中心,但會使用原點來定義區域的左上角。 捲動顯示物件的方式永遠是以完整的像素遞增捲動。
設定 scrollRect
Rectangle 物件的 x
屬性,可以將物件向左或向右捲動。 設定 scrollRect
Rectangle 物件的 y
屬性,可以將物件向上或向下捲動。 如果顯示物件旋轉了 90° 而您向左和向右捲動它,則顯示物件實際上會向上與向下捲動。
請注意,只有在顯示物件時,才會處理 scrollRect
屬性的變更。因此,如果在修改 scrollRect
之後呼叫諸如 localToGlobal
等方法,可能不會產生預期的結果。
注意:從 Flash Player 11.4/AIR 3.4 開始,矩形寬度或高度的負值已變更為 0。
實作
public function get scrollRect():Rectangle
public function set scrollRect(value:Rectangle):void
相關 API 元素
範例 ( 如何使用本範例 )
scrollRect
屬性如何定義顯示物件的捲動區域,此顯示物件名為 circle
。 當您按下 circle
物件時,clicked()
事件處理常式方法會調整 y
屬性 (circle
物件的 scrollRect
屬性),使物件可以向下捲動:
import flash.display.Sprite; import flash.geom.Rectangle; import flash.events.MouseEvent; var circle:Sprite = new Sprite(); circle.graphics.beginFill(0xFFCC00); circle.graphics.drawCircle(200, 200, 200); circle.scrollRect = new Rectangle(0, 0, 200, 200); addChild(circle); circle.addEventListener(MouseEvent.CLICK, clicked); function clicked(event:MouseEvent):void { var rect:Rectangle = event.target.scrollRect; rect.y -= 5; event.target.scrollRect = rect; }
stage | 屬性 |
stage:Stage
[唯讀] 語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
顯示物件的「舞台」。 Flash 執行階段應用程式只有一個 Stage 物件。例如,您可以建立多個顯示物件並將之載入顯示清單中,如此,每個顯示物件的 stage
屬性都會參照到相同的 Stage 物件 (即使顯示物件屬於載入的 SWF 檔案亦然)。
如果顯示物件未加入顯示清單,它的 stage
屬性便會設為 null
。
實作
public function get stage():Stage
範例 ( 如何使用本範例 )
width
屬性來放置文字欄位:
import flash.text.TextField; var tf1:TextField = new TextField(); tf1.text = "Text Field 1"; tf1.border = true; tf1.x = 10; addChild(tf1); tf1.width = tf1.stage.stageWidth / 2 - 10; var tf2:TextField = new TextField(); tf2.text = "Text Field 2"; tf2.border = true; tf2.x = tf1.x + tf1.width + 5; addChild(tf2); tf2.width = tf2.stage.stageWidth / 2 - 10; trace(stage.stageWidth);
transform | 屬性 |
transform:flash.geom:Transform
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
這是一個物件,具有和顯示物件的矩陣、顏色轉換和像素邊界有關的屬性。 特定屬性,包括 matrix、colorTransform 以及三個唯讀屬性 (concatenatedMatrix
、concatenatedColorTransform
和 pixelBounds
),將在 Transform 類別項目中說明。
每個變形物件的屬性其本身就是一個物件。 這一點很重要,因為要設定矩陣或 colorTransform 物件的新值,唯一的方式就是建立新物件並將該物件複製到 transform.matrix 或 transform.colorTransform 屬性。
例如,若要增加顯示物件矩陣的 tx
值,必須為整個矩陣物件建立副本,然後將此新物件複製到變形物件的矩陣屬性:
var myMatrix:Matrix = myDisplayObject.transform.matrix;
myMatrix.tx += 10;
myDisplayObject.transform.matrix = myMatrix;
您不能直接設定 tx
屬性。 下列程式碼不會影響 myDisplayObject
:
myDisplayObject.transform.matrix.tx += 10;
您也可以複製整個變形物件,再將它指定給另一個顯示物件的變形屬性。 例如,下列程式碼會將整個變形物件從 myOldDisplayObj
複製到 myNewDisplayObj
:
myNewDisplayObj.transform = myOldDisplayObj.transform;
產生的顯示物件 myNewDisplayObj
現在和原有的顯示物件 myOldDisplayObj
,都具有相同的矩陣、顏色轉換和像素邊界值。
請注意,若有硬體加速可供使用,AIR for TV 裝置會自動為顏色變化使用硬體加速。
實作
public function get transform():flash.geom:Transform
public function set transform(value:flash.geom:Transform):void
相關 API 元素
範例 ( 如何使用本範例 )
square
Sprite 物件。 當使用者按下 Sprite,transformer()
方法會調整 colorTransform
和 matrix
屬性 (Sprite 的 transform
屬性):
import flash.display.Sprite; import flash.geom.ColorTransform; import flash.geom.Matrix; import flash.geom.Transform; import flash.events.MouseEvent; var square:Sprite = new Sprite(); square.graphics.lineStyle(20, 0xFF2200); square.graphics.beginFill(0x0000DD); square.graphics.drawRect(0, 0, 100, 100); addChild(square); var resultColorTransform:ColorTransform = new ColorTransform(); resultColorTransform.alphaMultiplier = 0.5; resultColorTransform.redOffset = 155; resultColorTransform.greenMultiplier = 0.5; var skewMatrix:Matrix = new Matrix(1, 1, 0, 1); square.addEventListener(MouseEvent.CLICK, transformer); function transformer(event:MouseEvent):void { var transformation:Transform = square.transform; var tempMatrix:Matrix = square.transform.matrix; tempMatrix.concat(skewMatrix); square.transform.colorTransform = resultColorTransform; square.transform.matrix = tempMatrix; }
visible | 屬性 |
visible:Boolean
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
不管是否看得見顯示物件。 看不見的顯示物件也會被停用。 例如,如果 InteractiveObject 實體為 visible=false
,就無法按下它。
實作
public function get visible():Boolean
public function set visible(value:Boolean):void
範例 ( 如何使用本範例 )
visible
屬性,並呈現閃爍的效果:
import flash.text.TextField; import flash.utils.Timer; import flash.events.TimerEvent; var tf:TextField = new TextField(); tf.text = "Hello."; addChild(tf); var tim:Timer = new Timer(250); tim.start(); tim.addEventListener(TimerEvent.TIMER, blinker); function blinker(event:TimerEvent):void { tf.visible = !tf.visible; }
width | 屬性 |
width:Number
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
會指出顯示物件的寬度,以像素為單位。 此寬度是根據顯示物件內容的範圍計算而得。 當您設定 width
屬性時,scaleX
屬性也會相應調整,如下列程式碼所示:
var rect:Shape = new Shape(); rect.graphics.beginFill(0xFF0000); rect.graphics.drawRect(0, 0, 100, 100); trace(rect.scaleX) // 1; rect.width = 200; trace(rect.scaleX) // 2;
除了 TextField 和 Video 物件,無內容的顯示物件 (例如,空的 Sprite) 的寬度為 0,即使您嘗試將 width
設定為其它值也是如此。
實作
public function get width():Number
public function set width(value:Number):void
範例 ( 如何使用本範例 )
square
Sprite 物件。 當使用者按下 Sprite,widen()
方法會增加 Sprite 的 width
屬性:
import flash.display.Sprite; import flash.events.MouseEvent; var square:Sprite = new Sprite(); square.graphics.beginFill(0xFF0000); square.graphics.drawRect(0, 0, 100, 100); addChild(square); square.addEventListener(MouseEvent.CLICK, widen); function widen(event:MouseEvent):void { square.width += 10; }
x | 屬性 |
x:Number
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
指出 DisplayObject 實體相對於父輩 DisplayObjectContainer 之區域座標的 x 座標。 如果物件位於已經變形的 DisplayObjectContainer 中,就表示位於包含的 DisplayObjectContainer 的區域座標系統中。 因此,對於以逆時針旋轉 90° 的 DisplayObjectContainer 而言,DisplayObjectContainer 子物件會繼承以逆時針旋轉 90° 的座標系統。 物件的座標是指註冊點的位置。
實作
public function get x():Number
public function set x(value:Number):void
範例 ( 如何使用本範例 )
circle
Sprite 物件。 每 50 毫秒,便會用 Timer 物件來變更 Sprite 的 x
屬性。
import flash.display.Sprite; import flash.utils.Timer; import flash.events.TimerEvent; var circle:Sprite = new Sprite(); circle.graphics.beginFill(0xFF0000); circle.graphics.drawCircle(100, 100, 100); addChild(circle); var tim:Timer = new Timer(50); tim.start(); tim.addEventListener(TimerEvent.TIMER, bounce); var xInc:Number = 2; function bounce(event:TimerEvent):void { circle.x += xInc; if (circle.x > circle.width) { xInc = -2; } if (circle.x < 0) { xInc = 2; } }
y | 屬性 |
y:Number
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
指出 DisplayObject 實體相對於父輩 DisplayObjectContainer 之區域座標的 y 座標。 如果物件位於已經變形的 DisplayObjectContainer 中,就表示位於包含的 DisplayObjectContainer 的區域座標系統中。 因此,對於以逆時針旋轉 90° 的 DisplayObjectContainer 而言,DisplayObjectContainer 子物件會繼承以逆時針旋轉 90° 的座標系統。 物件的座標是指註冊點的位置。
實作
public function get y():Number
public function set y(value:Number):void
範例 ( 如何使用本範例 )
height
屬性 (根據每個物件的 textHeight
屬性來調整);而且也會藉由設定第二個文字欄位的 y
屬性來放置該文字欄位。
import flash.text.TextField; var tf1:TextField = new TextField(); tf1.text = "Text Field 1"; tf1.border = true; tf1.wordWrap = true; tf1.width = 40; tf1.height = tf1.textHeight + 5; addChild(tf1); var tf2:TextField = new TextField(); tf2.text = "Text Field 2"; tf2.border = true; tf2.wordWrap = true; tf2.width = 40; tf2.height = tf2.textHeight + 5; tf2.y = tf1.y + tf1.height + 5; addChild(tf2);
z | 屬性 |
z:Number
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10, AIR 1.5 |
表示 DisplayObject 實體相對於 3D 父輩容器的 z 座標位置 (沿著 z 軸)。此 z 屬性是用於處理 3D 座標,而非螢幕或像素座標。
當顯示物件的 z
屬性不是設定為預設值 0
時,則會自動建立對應的 Matrix3D 物件,以便在三維空間中調整顯示物件的位置和方向。使用 z 軸時,x 和 y 屬性的現有行為指令就會從螢幕或像素座標變更為相對於 3D 父輩容器的位置。
例如,位於 x = 100, y = 100, z = 200 之 _root
的子系不會在像素位置 (100,100) 繪製。此子系會在 3D 投影計算估計的位置繪製。其計算方式如下:
(x*cameraFocalLength/cameraRelativeZPosition, y*cameraFocalLength/cameraRelativeZPosition)
實作
public function get z():Number
public function set z(value:Number):void
相關 API 元素
範例 ( 如何使用本範例 )
z
軸向下和向上移動)。其中一個橢圓形設定為比另一個橢圓形更快速移動。
package { import flash.display.MovieClip; import flash.display.Shape; import flash.display.Graphics; import flash.events.Event; import flash.geom.*; public class ZAxisExample1 extends MovieClip { private var ellipse1Back:int = 1; private var ellipse2Back:int = 1; private var depth:int = 1000; public function ZAxisExample1():void { var ellipse1 = drawEllipse((this.stage.stageWidth / 2) - 100, (this.stage.stageHeight / 2), 100, 80, 10); var ellipse2 = drawEllipse((this.stage.stageWidth / 2) + 100, (this.stage.stageHeight / 2), 100, 80, 300); this.addChild(ellipse1); this.addChild(ellipse2); ellipse1.addEventListener(Event.ENTER_FRAME, ellipse1FrameHandler); ellipse2.addEventListener(Event.ENTER_FRAME, ellipse2FrameHandler); } private function drawEllipse(x:Number, y:Number, w:Number, h:Number, z:Number):Shape { var s:Shape = new Shape(); s.z = z; s.graphics.beginFill(0xFF0000); s.graphics.lineStyle(2); s.graphics.drawEllipse(x, y, w, h); s.graphics.endFill(); return s; } private function ellipse1FrameHandler(e:Event):void { ellipse1Back = setDepth(e, ellipse1Back); e.currentTarget.z += ellipse1Back * 10; } private function ellipse2FrameHandler(e:Event):void { ellipse2Back = setDepth(e, ellipse2Back); e.currentTarget.z += ellipse2Back * 20; } private function setDepth(e:Event, d:int):int { if(e.currentTarget.z > depth) { e.currentTarget.z = depth; d = -1; }else if (e.currentTarget.z < 0) { e.currentTarget.z = 0; d = 1; } return d; } } }
getBounds | () | 方法 |
public function getBounds(targetCoordinateSpace:DisplayObject):Rectangle
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
傳回可定義顯示物件區域 (相對於 targetCoordinateSpace
物件的座標系統) 的矩形。 以下列程式碼為例,矩形的傳回方式會根據您傳遞至方法的 targetCoordinateSpace
參數而有所不同:
var container:Sprite = new Sprite(); container.x = 100; container.y = 100; this.addChild(container); var contents:Shape = new Shape(); contents.graphics.drawCircle(0,0,100); container.addChild(contents); trace(contents.getBounds(container)); // (x=-100, y=-100, w=200, h=200) trace(contents.getBounds(this)); // (x=0, y=0, w=200, h=200)
注意:使用 localToGlobal()
和 globalToLocal()
方法,分別將顯示物件的區域座標轉換成顯示座標,或是將顯示座標轉換成區域座標。
getBounds()
方法與 getRect()
方法類似;然而,getBounds()
方法所傳回的「矩形」包含形狀上的任何筆畫,而 getRect()
方法所傳回的「矩形」則不然。 如需範例,請參閱 getRect()
方法的說明。
參數
targetCoordinateSpace:DisplayObject — 定義要使用之座標系統的顯示物件。
|
Rectangle — 可定義顯示物件區域 (相對於 targetCoordinateSpace 物件的座標系統) 的矩形。
|
相關 API 元素
getRect | () | 方法 |
public function getRect(targetCoordinateSpace:DisplayObject):Rectangle
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
根據 targetCoordinateSpace
參數所定義的座標系統,並排除形狀上的任何筆畫,傳回可定義顯示物件邊界的矩形。 getRect()
方法所傳回的值等於或小於 getBounds()
方法所傳回的值。
注意:使用 localToGlobal()
和 globalToLocal()
方法,分別將顯示物件的區域座標轉換成舞台座標,或是將舞台座標轉換成區域座標。
參數
targetCoordinateSpace:DisplayObject — 定義要使用之座標系統的顯示物件。
|
Rectangle — 可定義顯示物件區域 (相對於 targetCoordinateSpace 物件的座標系統) 的矩形。
|
相關 API 元素
範例 ( 如何使用本範例 )
getBounds()
方法如何能傳回大於 getRect()
方法所傳回的矩形。 在這種情況下,因為這些值是當做 lineStyle()
方法的 width
和 jointStyle
參數傳遞,所以 triangle
Sprite 會包含額外的筆畫。trace()
輸出 (最後兩行) 說明 getRect()
和 getBounds()
矩形之間的差異:
import flash.display.CapsStyle; import flash.display.JointStyle; import flash.display.LineScaleMode; import flash.display.Sprite; import flash.geom.Rectangle; var triangle:Sprite = new Sprite(); var color:uint = 0xFF0044; var width:Number = 20; var alpha:Number = 1.0; var pixelHinting:Boolean = true; var scaleMode:String = LineScaleMode.NORMAL; var caps:String = CapsStyle.SQUARE; var joints:String = JointStyle.MITER; triangle.graphics.lineStyle(width, color, alpha, pixelHinting, scaleMode, caps, joints); var triangleSide:Number = 100; triangle.graphics.moveTo(0, 0); triangle.graphics.lineTo(0, triangleSide); triangle.graphics.lineTo(triangleSide, triangleSide); triangle.graphics.lineTo(0, 0); addChild(triangle); trace(triangle.getBounds(this)); // (x=-10, y=-24.1, w=134.10000000000002, h=134.1) trace(triangle.getRect(this)); // (x=0, y=0, w=100, h=100)
globalToLocal | () | 方法 |
public function globalToLocal(point:Point):Point
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
將 point
物件從「舞台」(全域) 座標轉換成顯示物件的 (區域) 座標。
若要使用此方法,請先建立 Point 類別的實體。 您指定的 x 與 y 值與主要顯示區域的原點 (0,0) 相關,所以代表全域座標。 接著,將 Point 實體當作參數傳送至 globalToLocal()
方法。 此方法會傳回含有 x 與 y 值,且與顯示物件原點相關 (而不是與舞台原點相關) 的新 Point 物件。
參數
point:Point — 使用 Point 類別建立的物件。 Point 物件會將 x 和 y 座標指定為屬性。
|
Point — 具有相對於顯示物件之座標的 Point 物件。
|
相關 API 元素
範例 ( 如何使用本範例 )
hitTestPoint()
方法的結果。 globalToLocal()
方法會將「舞台」座標的點轉換成該形狀的座標空間:
import flash.display.Shape; import flash.geom.Point; var circle:Shape = new Shape(); circle.graphics.beginFill(0x0000FF); circle.graphics.drawCircle(40, 40, 40); circle.x = 10; addChild(circle); var point1:Point = new Point(0, 0); trace(circle.hitTestPoint(point1.x, point1.y, true)); // false trace(circle.hitTestPoint(point1.x, point1.y, false)); // false trace(circle.globalToLocal(point1)); // [x=-10, y=0] var point2:Point = new Point(10, 1); trace(circle.hitTestPoint(point2.x, point2.y, true)); // false trace(circle.hitTestPoint(point2.x, point2.y, false)); // true trace(circle.globalToLocal(point2)); // [x=0, y=1] var point3:Point = new Point(30, 20); trace(circle.hitTestPoint(point3.x, point3.y, true)); // true trace(circle.hitTestPoint(point3.x, point3.y, false)); // true trace(circle.globalToLocal(point3)); // [x=20, y=20]
globalToLocal3D | () | 方法 |
public function globalToLocal3D(point:Point):Vector3D
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10, AIR 1.5, Flash Lite 4 |
將二維點從「舞台」(全域) 座標轉換為三維顯示物件的 (區域) 座標。
若要使用此方法,請先建立 Point 類別的實體。 您指定給 Point 物件的 x 與 y 值是相對於主要顯示區域的原點 (0,0),所以代表全域座標。接著,將 Point 物件當做 point
參數傳遞至 globalToLocal3D()
方法。此方法會傳回三維座標,做為包含相對於三維顯示物件原點之 x
、y
和 z
值的 Vector3D 物件。
參數
point:Point — 代表全域 x 和 y 座標的二維 Point 物件。
|
Vector3D — 具有相對於三維顯示物件之座標的 Vector3D 物件。
|
hitTestObject | () | 方法 |
public function hitTestObject(obj:DisplayObject):Boolean
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
評估顯示物件的範圍框,看它是否與 obj
顯示物件的範圍框重疊或相交。
參數
obj:DisplayObject — 要測試的顯示物件。
|
Boolean — 如果與顯示物件的範圍框相交,則為 true ,否則為 false 。
|
範例 ( 如何使用本範例 )
hitTestObject()
方法的結果。請注意,雖然 circle2 與 circle3 沒有重疊,但是其範圍框卻重疊。因此,circle2 與 circle3 的碰撞測試會傳回 true
。
import flash.display.Shape; var circle1:Shape = new Shape(); circle1.graphics.beginFill(0x0000FF); circle1.graphics.drawCircle(40, 40, 40); addChild(circle1); var circle2:Shape = new Shape(); circle2.graphics.beginFill(0x00FF00); circle2.graphics.drawCircle(40, 40, 40); circle2.x = 50; addChild(circle2); var circle3:Shape = new Shape(); circle3.graphics.beginFill(0xFF0000); circle3.graphics.drawCircle(40, 40, 40); circle3.x = 100; circle3.y = 67; addChild(circle3); trace(circle1.hitTestObject(circle2)); // true trace(circle1.hitTestObject(circle3)); // false trace(circle2.hitTestObject(circle3)); // true
hitTestPoint | () | 方法 |
public function hitTestPoint(x:Number, y:Number, shapeFlag:Boolean = false):Boolean
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
評估顯示物件,看它是否與 x
和 y
參數所指定的點重疊或相交。 x
和 y
參數會指定舞台座標空間的點,而不是包含顯示物件的顯示物件容器 (除非該顯示物件容器就是舞台)。
參數
x:Number — 測試此物件與 x 座標。
| |
y:Number — 測試此物件與 y 座標。
| |
shapeFlag:Boolean (default = false ) — 要檢查物件 (true ) 或範圍框 (false ) 的實際像素。
|
Boolean — 如果顯示物件與指定的點重疊或相交,則為 true ,否則為 false 。
|
相關 API 元素
範例 ( 如何使用本範例 )
hitTestPoint()
方法的結果。 globalToLocal()
方法會將「舞台」座標的點轉換成該形狀的座標空間:
import flash.display.Shape; import flash.geom.Point; var circle:Shape = new Shape(); circle.graphics.beginFill(0x0000FF); circle.graphics.drawCircle(40, 40, 40); circle.x = 10; addChild(circle); var point1:Point = new Point(0, 0); trace(circle.hitTestPoint(point1.x, point1.y, true)); // false trace(circle.hitTestPoint(point1.x, point1.y, false)); // false trace(circle.globalToLocal(point1)); // [x=-10, y=0] var point2:Point = new Point(10, 1); trace(circle.hitTestPoint(point2.x, point2.y, true)); // false trace(circle.hitTestPoint(point2.x, point2.y, false)); // true trace(circle.globalToLocal(point2)); // [x=0, y=1] var point3:Point = new Point(30, 20); trace(circle.hitTestPoint(point3.x, point3.y, true)); // true trace(circle.hitTestPoint(point3.x, point3.y, false)); // true trace(circle.globalToLocal(point3)); // [x=20, y=20]
local3DToGlobal | () | 方法 |
public function local3DToGlobal(point3d:Vector3D):Point
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10, AIR 1.5, Flash Lite 4 |
將三維顯示物件的 (區域) 座標的三維點轉換為「舞台」(全域) 座標中的二維點。
例如,只能使用二維座標 (x,y) 來搭配 display.Graphics
方法繪圖。若要繪製三維物件,您必須將顯示物件的三維座標對應至二維座標。首先,建立 Vector3D 類別的實體,以保存三維顯示物件的 x、y 和 z 座標。接著,將 Vector3D 物件當做 point3d
參數傳遞至 local3DToGlobal()
方法。此方法會傳回可搭配 Graphics API 使用的二維 Point 物件,以繪製三維物件。
參數
point3d:Vector3D — Vector3D 物件,包含三維點或三維顯示物件的座標。
|
Point — 二維點,代表二維空間中的三維點。
|
範例 ( 如何使用本範例 )
display.Graphics
方法,在二維空間中繪製簡單的三維立方體。this
顯示物件的位置已偏移,因此立方體的註冊點位於其中心。Vector3D 物件的向量會保存此立方體的三維座標。首先會繪製立方體頂端,其次繪製底端,接著連接上下各四個角落。在繪製立方體之前,您必須先將立方體加入至顯示物件容器,才能使用 local3DToGlobal()
方法。
package { import flash.display.MovieClip; import flash.display.Sprite; import flash.display.Graphics; import flash.geom.*; public class Local3DToGlobalExample extends MovieClip { private var myCube:Sprite = new Sprite(); private var v8:Vector.<Vector3D> = new Vector.<Vector3D>(8); public function Local3DToGlobalExample():void { this.x = -(this.stage.stageWidth / 2); this.y = -(this.stage.stageWidth / 2); v8[0] = new Vector3D(-40,-40,-40); v8[1] = new Vector3D(40,-40,-40); v8[2] = new Vector3D(40,-40,40); v8[3] = new Vector3D(-40,-40,40); v8[4] = new Vector3D(-40,100,-40); v8[5] = new Vector3D(40,100,-40); v8[6] = new Vector3D(40,100,40); v8[7] = new Vector3D(-40,100,40); myCube.x = (this.stage.stageWidth / 2); myCube.y = (this.stage.stageWidth / 2); myCube.z = 1; addChild(myCube); Cube(); } private function Cube():void { var ps:Point = new Point(0,0); myCube.graphics.lineStyle(2,0xFF0000); ps = myCube.local3DToGlobal(v8[0]); myCube.graphics.moveTo(ps.x, ps.y); ps = myCube.local3DToGlobal(v8[1]); myCube.graphics.lineTo(ps.x, ps.y); ps = myCube.local3DToGlobal(v8[2]); myCube.graphics.lineTo(ps.x, ps.y); ps = myCube.local3DToGlobal(v8[3]); myCube.graphics.lineTo(ps.x, ps.y); ps = myCube.local3DToGlobal(v8[0]); myCube.graphics.lineTo(ps.x, ps.y); ps = myCube.local3DToGlobal(v8[4]); myCube.graphics.moveTo(ps.x, ps.y); ps = myCube.local3DToGlobal(v8[5]); myCube.graphics.lineTo(ps.x, ps.y); ps = myCube.local3DToGlobal(v8[6]); myCube.graphics.lineTo(ps.x, ps.y); ps = myCube.local3DToGlobal(v8[7]); myCube.graphics.lineTo(ps.x, ps.y); ps = myCube.local3DToGlobal(v8[4]); myCube.graphics.lineTo(ps.x, ps.y); ps = myCube.local3DToGlobal(v8[0]); myCube.graphics.moveTo(ps.x, ps.y); ps = myCube.local3DToGlobal(v8[4]); myCube.graphics.lineTo(ps.x, ps.y); ps = myCube.local3DToGlobal(v8[1]); myCube.graphics.moveTo(ps.x, ps.y); ps = myCube.local3DToGlobal(v8[5]); myCube.graphics.lineTo(ps.x, ps.y); ps = myCube.local3DToGlobal(v8[2]); myCube.graphics.moveTo(ps.x, ps.y); ps = myCube.local3DToGlobal(v8[6]); myCube.graphics.lineTo(ps.x, ps.y); ps = myCube.local3DToGlobal(v8[3]); myCube.graphics.moveTo(ps.x, ps.y); ps = myCube.local3DToGlobal(v8[7]); myCube.graphics.lineTo(ps.x, ps.y); } } }
localToGlobal | () | 方法 |
public function localToGlobal(point:Point):Point
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
將 point
物件從顯示物件的 (區域) 座標轉換成「舞台」(全域) 座標。
這個方法可以讓您將任何指定的 x 和 y 座標值,從相對於特定顯示物件 (區域座標) 的原點 (0,0) 轉換成相對於舞台 (全域座標) 的原點。
若要使用此方法,請先建立 Point 類別的實體。 您指定的 x 與 y 值與顯示物件的原點相關,所以代表區域座標。
接著,將您建立做為參數的 Point 實體傳送至 localToGlobal()
方法。 此方法會傳回含有 x 與 y 值,且與舞台原點相關 (而不是與顯示物件原點相關) 的新 Point 物件。
參數
point:Point — 用 Point 類別建立之點的名稱或識別名稱,它會將 x 和 y 座標指定為屬性。
|
Point — 具有相對於舞台之座標的 Point 物件。
|
相關 API 元素
範例 ( 如何使用本範例 )
mouseX
和 mouseY
屬性都位於顯示物件的座標空間中。 此程式碼使用 localToGlobal()
方法,將這些屬性轉移為全域 (「舞台」) 座標:
import flash.display.Sprite; import flash.events.MouseEvent; import flash.geom.Point; var square:Sprite = new Sprite(); square.graphics.beginFill(0xFFCC00); square.graphics.drawRect(0, 0, 100, 100); square.x = 100; square.y = 200; addChild(square); square.addEventListener(MouseEvent.CLICK, traceCoordinates) function traceCoordinates(event:MouseEvent):void { var clickPoint:Point = new Point(square.mouseX, square.mouseY); trace("display object coordinates:", clickPoint); trace("stage coordinates:", square.localToGlobal(clickPoint)); }
added | 事件 |
flash.events.Event
屬性 Event.type =
flash.events.Event.ADDED
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
當顯示物件加入顯示清單中時傳送。 下列方法會觸發此事件:DisplayObjectContainer.addChild()
, DisplayObjectContainer.addChildAt()
。
Event.ADDED
常數會定義 added
事件物件的 type
屬性值。
這個事件具有下列屬性:
屬性 | 值 |
---|---|
bubbles | true |
cancelable | false ;沒有要取消的預設行為指令。 |
currentTarget | 正主動使用事件偵聽程式處理 Event 物件的物件。 |
target | 正要加入顯示清單中的 DisplayObject 實體。 target 不會永遠都是顯示清單中註冊事件偵聽程式的物件。 請使用 currentTarget 屬性,存取目前正在處理該事件之顯示清單中的物件。 |
相關 API 元素
addedToStage | 事件 |
flash.events.Event
屬性 Event.type =
flash.events.Event.ADDED_TO_STAGE
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9.0.28.0, Flash Lite 4 |
會在顯示物件加入舞台上的顯示清單時,以直接或是透過加入包含該顯示物件之子樹狀結構的方式傳送。 下列方法會觸發此事件:DisplayObjectContainer.addChild()
, DisplayObjectContainer.addChildAt()
。
Event.ADDED_TO_STAGE
常數會定義 addedToStage
事件物件的 type
屬性值。
這個事件具有下列屬性:
屬性 | 值 |
---|---|
bubbles | false |
cancelable | false ;沒有要取消的預設行為指令。 |
currentTarget | 正主動使用事件偵聽程式處理 Event 物件的物件。 |
target | 加入至舞台上顯示清單的 DisplayObject 實體,方式為直接加入或透過加入包含 DisplayObject 實體的子樹狀結構來加入。 如果直接加入 DisplayObject 實體,便會在此事件之前發生 added 事件。 |
相關 API 元素
enterFrame | 事件 |
flash.events.Event
屬性 Event.type =
flash.events.Event.ENTER_FRAME
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
[廣播事件] 當播放磁頭進入新影格時傳送。如果播放磁頭沒有移動,或者只有一個影格,此事件會以影格速率不斷地傳送。 這是廣播事件,表示所有具有針對此事件註冊之偵聽程式的顯示物件都會加以傳送。
Event.ENTER_FRAME
常數會定義 enterFrame
事件物件的 type
屬性值。
注意:這個事件沒有「捕捉階段」也沒有「反昇階段」,這表示事件偵聽程式必須直接加入至任何可能的目標,不論目標是否在顯示清單上。
這個事件具有下列屬性:
屬性 | 值 |
---|---|
bubbles | false |
cancelable | false ;沒有要取消的預設行為指令。 |
currentTarget | 正主動使用事件偵聽程式處理 Event 物件的物件。 |
target | 具有為 enterFrame 事件註冊之偵聽程式的任何 DisplayObject 實體。 |
exitFrame | 事件 |
flash.events.Event
屬性 Event.type =
flash.events.Event.EXIT_FRAME
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10, AIR 2, Flash Lite 4 |
[廣播事件] 當播放磁頭結束目前影格時傳送。所有的影格指令碼已經執行。如果播放磁頭沒有移動,或者只有一個影格,此事件會以影格速率不斷地傳送。 這是廣播事件,表示所有具有針對此事件註冊之偵聽程式的顯示物件都會加以傳送。
Event.EXIT_FRAME
常數會定義 exitFrame
事件物件的 type
屬性值。
注意:這個事件沒有「捕捉階段」也沒有「反昇階段」,這表示事件偵聽程式必須直接加入至任何可能的目標,不論目標是否在顯示清單上。
這個事件具有下列屬性:
屬性 | 值 |
---|---|
bubbles | false |
cancelable | false ;沒有要取消的預設行為指令。 |
currentTarget | 正主動使用事件偵聽程式處理 Event 物件的物件。 |
target | 具有為 enterFrame 事件註冊之偵聽程式的任何 DisplayObject 實體。 |
frameConstructed | 事件 |
flash.events.Event
屬性 Event.type =
flash.events.Event.FRAME_CONSTRUCTED
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10, AIR 2, Flash Lite 4 |
[廣播事件] 在影格顯示物件的建構函式執行之後,且影格指令碼執行之前傳送。如果播放磁頭沒有移動,或者只有一個影格,此事件會以影格速率不斷地傳送。 這是廣播事件,表示所有具有針對此事件註冊之偵聽程式的顯示物件都會加以傳送。
Event.FRAME_CONSTRUCTED
常數會定義 frameConstructed
事件物件的 type
屬性值。
注意:這個事件沒有「捕捉階段」也沒有「反昇階段」,這表示事件偵聽程式必須直接加入至任何可能的目標,不論目標是否在顯示清單上。
這個事件具有下列屬性:
屬性 | 值 |
---|---|
bubbles | false |
cancelable | false ;沒有要取消的預設行為指令。 |
currentTarget | 正主動使用事件偵聽程式處理 Event 物件的物件。 |
target | 具有為 frameConstructed 事件註冊之偵聽程式的任何 DisplayObject 實體。 |
removed | 事件 |
flash.events.Event
屬性 Event.type =
flash.events.Event.REMOVED
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
會當顯示物件將要從顯示清單移除時傳送。 DisplayObjectContainer 類別的兩個方法都會產生此事件:removeChild()
和 removeChildAt()
。
如果必須移除某個物件以挪出空間給新物件,則 DisplayObjectContainer 物件的下列方法也會產生此事件:addChild()
、addChildAt()
和 setChildIndex()
。
Event.REMOVED
常數會定義 removed
事件物件的 type
屬性值。
這個事件具有下列屬性:
屬性 | 值 |
---|---|
bubbles | true |
cancelable | false ;沒有要取消的預設行為指令。 |
currentTarget | 正主動使用事件偵聽程式處理 Event 物件的物件。 |
target | 要從顯示清單中移除的 DisplayObject 實體。 target 不會永遠都是顯示清單中註冊事件偵聽程式的物件。 請使用 currentTarget 屬性,存取目前正在處理該事件之顯示清單中的物件。 |
removedFromStage | 事件 |
flash.events.Event
屬性 Event.type =
flash.events.Event.REMOVED_FROM_STAGE
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9.0.28.0, Flash Lite 4 |
會在顯示物件即將從舞台上的顯示清單移除時,以直接或是透過移除包含該顯示物件之子樹狀結構的方式傳送。 DisplayObjectContainer 類別的兩個方法都會產生此事件:removeChild()
和 removeChildAt()
。
如果必須移除某個物件以挪出空間給新物件,則 DisplayObjectContainer 物件的下列方法也會產生此事件:addChild()
、addChildAt()
和 setChildIndex()
。
Event.REMOVED_FROM_STAGE
常數會定義 removedFromStage
事件物件的 type
屬性值。
這個事件具有下列屬性:
屬性 | 值 |
---|---|
bubbles | false |
cancelable | false ;沒有要取消的預設行為指令。 |
currentTarget | 正主動使用事件偵聽程式處理 Event 物件的物件。 |
target | 從舞台上顯示清單中移除的 DisplayObject 實體,方式為直接移除或透過移除包含 DisplayObject 實體的子樹狀結構來移除。 如果直接移除 DisplayObject 實體,便會在此事件之前發生 removed 事件。 |
render | 事件 |
flash.events.Event
屬性 Event.type =
flash.events.Event.RENDER
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
[廣播事件] 當顯示清單將要更新和顯示時傳送。此事件會在呈現顯示清單之前,為偵聽此事件的物件提供最後一次變更的機會。 每次當您要傳送 render
事件時,就必須呼叫 Stage 物件的 invalidate()
方法。只有在某個物件與呼叫 Stage.invalidate()
的物件之間存在相互信任時,Render
事件才會傳送至該物件。這是廣播事件,表示所有具有針對此事件註冊之偵聽程式的顯示物件都會加以傳送。
注意:如果顯示內容沒有出現,就不會傳送此事件。例如,內容最小化或被遮住的時候。
Event.RENDER
常數會定義 render
事件物件的 type
屬性值。
注意:這個事件沒有「捕捉階段」也沒有「反昇階段」,這表示事件偵聽程式必須直接加入至任何可能的目標,不論目標是否在顯示清單上。
這個事件具有下列屬性:
屬性 | 值 |
---|---|
bubbles | false |
cancelable | false ;無法取消預設的行為指令。 |
currentTarget | 正主動使用事件偵聽程式處理 Event 物件的物件。 |
target | 具有為 render 事件註冊之偵聽程式的任何 DisplayObject 實體。 |
DisplayObjectExample
類別,在「舞台」的角落繪製橘色正方形,然後會顯示每一個事件的文字資訊,以回應這些事件。 您可以執行下列步驟來完成這項工作:
- 宣告方形的顏色與大小所需的類別屬性。
- 此建構函式會呼叫
draw()
方法,在「舞台」上的預設座標 x = 0, y = 0 處繪製橘色正方形。 - 下列事件偵聽程式方法會附加到此正方形:
addedHandler()
會偵聽added
事件,在正方形加入至顯示清單時傳送。enterFrameHandler()
會偵聽enterFrame
事件,在本範例中此方法並無實質意義。removedHandler()
會偵聽removed
事件,會在正方形從顯示清單中移除 (按下正方形即會移除) 時傳送。clickHandler()
會偵聽click
事件,會在按一下橘色正方形時傳送。- 在更新顯示清單後,
renderHandler()
會偵聽render
事件。
package { import flash.display.Sprite; public class DisplayObjectExample extends Sprite { public function DisplayObjectExample() { var child:CustomDisplayObject = new CustomDisplayObject(); addChild(child); } } } import flash.display.DisplayObject; import flash.display.Sprite; import flash.display.Stage; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.*; class CustomDisplayObject extends Sprite { private var bgColor:uint = 0xFFCC00; private var size:uint = 80; public function CustomDisplayObject() { draw(); addEventListener(Event.ADDED, addedHandler); addEventListener(Event.ENTER_FRAME, enterFrameHandler); addEventListener(Event.REMOVED, removedHandler); addEventListener(MouseEvent.CLICK, clickHandler); addEventListener(Event.RENDER, renderHandler); } private function draw():void { graphics.beginFill(bgColor); graphics.drawRect(0, 0, size, size); graphics.endFill(); } private function clickHandler(event:MouseEvent):void { trace("clickHandler: " + event); parent.removeChild(this); } private function addedHandler(event:Event):void { trace("addedHandler: " + event); stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; stage.addEventListener("resize", resizeHandler); } private function enterFrameHandler(event:Event):void { trace("enterFrameHandler: " + event); removeEventListener("enterFrame", enterFrameHandler); } private function removedHandler(event:Event):void { trace("removedHandler: " + event); stage.removeEventListener("resize", resizeHandler); } private function renderHandler(event:Event):void { trace("renderHandler: " + event); } private function resizeHandler(event:Event):void { trace("resizeHandler: " + event); } }
Tue Jun 12 2018, 03:47 PM Z