表示リスト内の移動

既に見たように、表示リストはツリー構造です。ツリーの一番上には、複数の表示オブジェクトを含めることができるステージがあります。これらの表示オブジェクトは、それ自体が表示オブジェクトコンテナであり、別の表示オブジェクト、つまり表示オブジェクトコンテナを含めることができます。


SWF ファイルの仮想表示リスト構造を示す図。

DisplayObjectContainer クラスには、表示オブジェクトコンテナの子リストを使用して表示リスト内を移動するためのプロパティとメソッドが含まれています。たとえば、次のようなコードがあるとします。このコードは、2 つの表示オブジェクト titlepictcontainer オブジェクト (Sprite、Sprite クラスは DisplayObjectContainer クラスを拡張します) に追加します。

var container:Sprite = new Sprite();
var title:TextField = new TextField();
title.text = "Hello";
var pict:Loader = new Loader();
var url:URLRequest = new URLRequest("banana.jpg");
pict.load(url);
pict.name = "banana loader";
container.addChild(title);
container.addChild(pict);

getChildAt() メソッドは、特定のインデックス位置にある表示リストの子を返します。

trace(container.getChildAt(0) is TextField); // true

子オブジェクトに名前でアクセスすることもできます。表示オブジェクトには name プロパティがあります。name プロパティを割り当てなかった場合は、Flash Player では "instance1" などのデフォルト値が割り当てられます。たとえば、次のコードは、getChildByName() メソッドを使用して "banana loader" という名前で子表示オブジェクトにアクセスする方法を示します。

trace(container.getChildByName("banana loader") is Loader); // true

getChildByName() メソッドを使用すると、getChildAt() メソッドを使用するよりパフォーマンスが低下します。

表示オブジェクトコンテナには表示リストの子オブジェクトとして別の表示オブジェクトコンテナを含めることができるため、ツリーのようにアプリケーションの表示リスト内を移動できます。たとえば、前述のコードの抜粋では、pict Loader オブジェクトのロード操作が完了すると、pict オブジェクトにビットマップである子表示オブジェクトがロードされます。このビットマップ表示オブジェクトにアクセスするために、pict.getChildAt(0) を記述することができます。また、container.getChildAt(0) == pict であるため、container.getChildAt(0).getChildAt(0) を記述することもできます。

次の関数は、表示オブジェクトコンテナから表示リストのインデントされた trace() を出力します。

function traceDisplayList(container:DisplayObjectContainer,
indentString:String = ""):void
{ var child:DisplayObject; for (var i:uint=0; i < container.numChildren; i++) { child = container.getChildAt(i); trace(indentString, child, child.name); if (container.getChildAt(i) is DisplayObjectContainer) { traceDisplayList(DisplayObjectContainer(child), indentString + " ") } } }

 

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

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