表示リストを使用するアプローチの利点

Flash Player 9 以降、Adobe AIR 1.0 以降

ActionScript 3.0 では、各種の表示オブジェクトに対して別個のクラスがあります。 ActionScript 1.0 および 2.0 では、同じタイプの多くのオブジェクトが、すべて 1 つのクラス、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 では、表示オブジェクトコンテナのそれぞれの子リストが 1 つの配列として内部にキャッシュされるので、インデックスによるルックアップが非常に高速に実行されます。 また、表示オブジェクトコンテナのすべての子を非常に高速にループすることもできます。

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 では、通常は SWF ファイルに新しい MovieClip オブジェクトを追加して、基本シェイプを作成するか、またはビットマップを表示します。 ActionScript 3.0 では、DisplayObject クラスに Shape、Bitmap などの多くのビルトインサブクラスが含まれています。 ActionScript 3.0 のクラスは特定のタイプのオブジェクト用に特化されているので、ビルトインクラスの基本サブクラスを簡単に作成できます。

例えば、ActionScript 2.0 で円を描画するには、カスタムクラスのオブジェクトをインスタンス化したときに MovieClip クラスを拡張する CustomCircle クラスを作成できました。 しかし、このクラスには、クラスに適用されない 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); 
    } 
}