採用顯示清單的優點
Flash Player 9 以及更新的版本,Adobe AIR 1.0 以及更新的版本
在 ActionScript 3.0 中,不同類型的顯示物件有不同的類別;在 ActionScript 1.0 和 2.0 中,許多相同類型的物件全部都會包含在 MovieClip 類別中。
這種類別的個別性及顯示清單的階層架構有下列優點:
-
顯示呈現更有效率,並減少記憶體用量
-
更完善的深度管理
-
完整的顯示清單移動方式
-
清單外顯示物件
-
更容易產生顯示物件的子類別
顯示呈現更有效率,而且檔案更小
在 ActionScript 1.0 和 2.0 中,您只能在 MovieClip 物件中繪製形狀;在 ActionScript 3.0 中,則有更簡單的顯示物件類別,您可以在其中繪製形狀。由於這些 ActionScript 3.0 顯示物件類別都沒有 MovieClip 物件所包含的完整方法和屬性,因此記憶體和處理器資源的負擔較輕。
例如,每一個 MovieClip 物件都包含影片片段時間軸的屬性,而 Shape 物件則不包含這些屬性。管理時間軸的屬性可能會耗用許多記憶體及處理器資源,在 ActionScript 3.0 中,使用 Shape 物件可以改善效能,Shape 物件的額外負荷比複合 MovieClip 物件少。Flash Player 和 AIR 都不需要管理未使用的 MovieClip 屬性,因此可以提升速度,並減少物件所耗費的記憶體使用量。
更完善的深度管理
在 ActionScript 1.0 和 2.0 中,深度會透過線性深度管理配置和
getNextHighestDepth()
之類的方法來管理。
ActionScript 3.0 則包含 DisplayObjectContainer 類別,其中有更便利的方法和屬性可用來管理顯示物件的深度。
在 ActionScript 3.0 中,當您將顯示物件移至 DisplayObjectContainer 實體之子清單中的新位置時,顯示物件容器中的其它子系都會自動重新放置,並在顯示物件容器中指定適當的子索引位置。
同時在 ActionScript 3.0 中,一定可以找到所有顯示物件容器的所有子物件。每一個 DisplayObjectContainer 實體都有
numChildren
屬性,其中列出顯示物件容器中的子系數目,而由於顯示物件容器的子清單永遠都是索引清單,您可以從索引位置 0 檢查清單中的每一個物件,一直檢查到最後的索引位置 (
numChildren - 1
);而在 ActionScript 1.0 和 2.0 中,MovieClip 物件的方法和屬性就不可能這樣。
在 ActionScript 3.0 中,您可以輕易地依序移動經過顯示清單。顯示物件容器子清單的索引數目之間沒有空隙。在移動顯示清單及管理物件深度方面,也較 ActionScript 1.0 和 2.0 更簡單。在 ActionScript 1.0 及 2.0 中,影片片段可能包含在深度順序有斷續間隔的物件,使得物件清單的移動變得相當困難。而在 ActionScript 3.0 中,顯示物件容器的每一份子清單都是由內部快取為陣列,因此在 (依索引) 查閱時非常快速,循環執行顯示物件容器的所有子系迴圈也一樣非常快速。
在 ActionScript 3.0 中,您也可以使用 DisplayObjectContainer 類別的
getChildByName()
方法,存取顯示物件容器中的子系。
完整的顯示清單移動方式
在 ActionScript 1.0 和 2.0 中,您無法存取一些以 Flash 編寫工具繪製的物件,例如向量形狀;而在 ActionScript 3.0 中,您可以存取顯示清單上的所有物件,包括使用 ActionScript 及以 Flash 編寫工具建立的所有顯示物件。如需詳細資訊,請參閱
在顯示清單中移動
。
清單外顯示物件
在 ActionScript 3.0 中,您可以建立不在可見顯示清單上的顯示物件,這些物件稱為「清單外」顯示物件。顯示物件只有在您呼叫已加入顯示清單之 DisplayObjectContainer 實體的
addChild()
或
addChildAt()
方法時,才會加入可見的顯示清單中。
您可以使用清單外顯示物件組合成複雜的顯示物件,如具有包含多個顯示物件的多個顯示物件容器的顯示物件。您可以透過將顯示物件放在清單外來組合複雜的物件,而不必耗費處理時間來呈現這些顯示物件,然後在需要時,再將清單外顯示物件加入至顯示清單。而且,您也可以隨意將顯示物件容器的子系移入或移出顯示清單,或移至顯示清單中任何想要的位置。
更容易產生顯示物件的子類別
在 ActionScript 1.0 和 2.0 中,您必須經常將新的 MovieClip 物件加入 SWF 檔中,以建立基本的形狀或顯示點陣圖;而在 ActionScript 3.0 中,DisplayObject 類別包含許多內建的子類別,其中就包括了 Shape 和 Bitmap。由於 ActionScript 3.0 中的類別更專屬於特定物件類型,因此更容易建立內建類別的基本子類別。
例如,若要在 ActionScript 2.0 中繪製圓形,您可以建立 CustomCircle 類別,在自訂類別的物件實體化時,擴充 MovieClip 類別。但是,該類別也會包含一些來自 MovieClip 類別的屬性和方法 (例如
totalFrames
),其實並不適用於此類別;而在 ActionScript 3.0 中,您可以建立擴充 Shape 物件的 CustomCircle 類別,因此就不會納入 MovieClip 類別中所含不相關的屬性和方法。下列程式碼會示範 CustomCircle 類別的範例:
import flash.display.*;
public class CustomCircle extends Shape
{
var xPos:Number;
var yPos:Number;
var radius:Number;
var color:uint;
public function CustomCircle(xInput:Number,
yInput:Number,
rInput:Number,
colorInput:uint)
{
xPos = xInput;
yPos = yInput;
radius = rInput;
color = colorInput;
this.graphics.beginFill(color);
this.graphics.drawCircle(xPos, yPos, radius);
}
}
|
|
|