採用顯示清單的優點

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); 
    } 
}