表示オブジェクトコンテナの操作

DisplayObjectContainer オブジェクトが表示リストから削除されたか、何らかの方法で移動または変換された場合、DisplayObjectContainer 内の各表示オブジェクトも、削除、移動、変換されます。

表示オブジェクトコンテナはそれ自体が表示オブジェクトの 1 つの型であり、別の表示オブジェクトコンテナに追加できます。たとえば、次の図は、アウトラインシェイプ 1 つと (PictureFrame 型の) 表示オブジェクトコンテナ 4 つを含む表示オブジェクトコンテナ pictureScreen を示します。


4 つのユーザーインターフェイスウィンドウ。イメージの果物が異なる (バナナ、洋なし、みかん、りんご) 以外は同じもの。

表示リストに表示オブジェクトを表示するには、表示リスト上にある表示オブジェクトコンテナに表示オブジェクトを追加する必要があります。これには、コンテナオブジェクトの addChild() メソッドまたは addChildAt() メソッドを使用します。たとえば、次のコードの最後の行がなければ、myTextField オブジェクトは表示されません。

var myTextField:TextField = new TextField();
myTextField.text = "hello";
this.root.addChild(myTextField);

このサンプルコードでは、コードを格納する MovieClip 表示オブジェクトコンテナを this.root によって指定します。実際のコードでは、別のコンテナを指定できます。

表示オブジェクトコンテナの子リスト内の特定の位置に子を追加するには、addChildAt() メソッドを使用します。子リスト内の 0 から始まるインデックス位置は、表示オブジェクトのレイヤー (前から後ろへの順) に対応しています。たとえば、次のような 3 つの表示オブジェクトがあるとします。各オブジェクトは、Ball と呼ばれるカスタムクラスから作成されました。


表示オブジェクトを表す 3 つの黄色い円。3 つの円は水平方向に並んでおり、重なり合っていません。また、左から右へ順番に "a"、"b"、"c" とラベル付けされています。

コンテナ内のこれらの表示オブジェクトのレイヤーは、addChildAt() メソッドを使用して調整できます。たとえば、次のようなコードがあるとします。

ball_A = new Ball(0xFFCC00, "a");
ball_A.name = "ball_A";
ball_A.x = 20;
ball_A.y = 20;
container.addChild(ball_A);

ball_B = new Ball(0xFFCC00, "b");
ball_B.name = "ball_B";
ball_B.x = 70;
ball_B.y = 20;
container.addChild(ball_B);

ball_C = new Ball(0xFFCC00, "c");
ball_C.name = "ball_C";
ball_C.x = 40;
ball_C.y = 60;
container.addChildAt(ball_C, 1);

このコードを実行後、表示オブジェクトは、container DisplayObjectContainer オブジェクト内で次のように配置されます。オブジェクトのレイヤーに注意してください。


コード実行後の 3 つの円。"b" は "a" の右端と重なっています。"c" は "a" の右下と重なっていると同時に、"b" の左下とも重なっています。

表示リストの一番上にオブジェクトを再配置するには、リストにオブジェクトを再度追加するだけです。たとえば、前のコードの実行後、ball_A をスタックの最上部に移動するには、次のコード行を使用します。

container.addChild(ball_A);

このコードは、ball_Acontainer の表示リスト内から削除してリストの最上部に再度追加します。その結果、スタックの最上部に移動されます。

表示オブジェクトのレイヤーの順序を確認するには、getChildAt() メソッドを使用します。getChildAt() メソッドは、メソッドに渡すインデックス番号に基づいてコンテナの子オブジェクトを返します。たとえば、次のコードは、container DisplayObjectContainer オブジェクトの子リスト内の異なる位置にある表示オブジェクトの名前を表示します。

trace(container.getChildAt(0).name); // ball_A
trace(container.getChildAt(1).name); // ball_C
trace(container.getChildAt(2).name); // ball_B

親コンテナの子リストから表示オブジェクトを削除すると、リスト上でそれより上位にあるエレメントの子インデックス内の位置がそれぞれ下がります。たとえば、引き続き前のコードを使用すると、次のコードは、子リスト内の下位にある表示オブジェクトが削除された場合、container DisplayObjectContainer 内の位置 2 にあった表示オブジェクトが位置 1 に移動することを示します。

container.removeChild(ball_C);
trace(container.getChildAt(0).name); // ball_A
trace(container.getChildAt(1).name); // ball_B

removeChild() および removeChildAt() メソッドは、表示オブジェクトインスタンスを完全に削除しません。コンテナの子リストから削除するだけです。インスタンスは、別の変数で参照できますオブジェクトを完全に削除するには、delete 演算子を使用します。

表示オブジェクトには親コンテナが 1 つだけあるので、その 1 つだけの表示オブジェクトコンテナに表示オブジェクトのインスタンスを追加できます。たとえば、次のコードは、表示オブジェクト tf1 が 1 つだけのコンテナ (この例では、DisplayObjectContainer クラスを拡張する Sprite) 内にあることを示します。

tf1:TextField = new TextField();
tf2:TextField = new TextField();
tf1.name = "text 1";
tf2.name = "text 2";

container1:Sprite = new Sprite();
container2:Sprite = new Sprite();

container1.addChild(tf1);
container1.addChild(tf2);
container2.addChild(tf1);

trace(container1.numChildren); // 1
trace(container1.getChildAt(0).name); // テキスト 2
trace(container2.numChildren); // 1
trace(container2.getChildAt(0).name); // テキスト 1

表示オブジェクトコンテナ内に含まれる表示オブジェクトを別の表示オブジェクトコンテナに追加すると、表示オブジェクトは最初の表示オブジェクトコンテナの子リストから削除されます。

上記で説明したメソッド以外にも、DisplayObjectContainer クラスでは、子表示オブジェクトを操作するための次のようなメソッドが定義されています。

詳細については、『ActionScript 3.0 コンポーネントリファレンスガイド』を参照してください。

表示リスト外の表示オブジェクト、すなわち Stage の子である表示オブジェクトコンテナに含まれない表示オブジェクトを "リスト外" 表示オブジェクトと呼びます。


 

このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート

現在のページ: http://livedocs.adobe.com/flash/9.0_jp/main/00000148.html