サイトトップ

Director Flash 書籍 業務内容 プロフィール

Macromedia Flash非公式テクニカルノート

DisplayObjectContainer.addChild()メソッド

ID: FN0607001 Product: Flash

Platform: All
Version: Flash 9 and above

シンタックス[*1]
public function addChild(child:DisplayObject):DisplayObject

[訳者注*1] DisplayObjectContainerクラスのパッケージと継承、およびサブクラスはつぎのとおりです。

パッケージ flash.display
継承 DisplayObjectContainer > InteractiveObject > DisplayObject > EventDispatcher > Object
サブクラス Loader、Sprite、Stage

なお、DisplayObjectContainerクラスについては、akihiro kamijo「DisplayObjectContainerクラス」をご参照ください。

引数
child:DisplayObject - DisplayObjectインスタンス。DisplayObjectContainerインスタンスの子として追加します。

戻り値
DisplayObject - DisplayObjectインスタンス。メソッドの引数childとして渡されたインスタンスを返します。

イベント
added:Event - DisplayObjectがディスプレイリストに追加されると発生します。

例外のスロー
ArgumentError - 子のインスタンスが親と同じ場合にスローされます。

説明
DisplayObjectインスタンスを、指定したDisplayObjectContainerインスタンスの子として追加します。追加した子のインスタンスは、他のDisplayObjectContainerインスタンスの子すべての最前面(上部)に配置されます(子のインスタンスを指定したインデックス位置に加えるには、addChildAt()メソッドを用います)。

追加した子オブジェクトがすでに別のDisplayObjectContainerを親(parent)としていたとき、その子オブジェクトはもとのDisplayObjectContainerの子のリスト(ディスプレイリスト)からは削除されます。


つぎの例は、container1とcontainer2というふたつのSpriteオブジェクトを設定します[*2]。サンプルはaddChild()メソッドを呼出して、表示階層を構築します。container1はcontainer2の子で、別のふたつのDisplayObject、circle1とcircle2はcontainer1の子になります[*3]trace()メソッドを呼出して、各オブジェクトの子の数を表示しています。なお、孫はnumChildrenの数にはカウントされないことにご注意ください。

import flash.display.Sprite;

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

var circle1:Sprite = new Sprite();
circle1.graphics.beginFill(0xFFCC00);
circle1.graphics.drawCircle(40, 40, 40);

var circle2:Sprite = new Sprite();
circle2.graphics.beginFill(0x00CCFF);
circle2.graphics.drawCircle(80, 40, 40);

container2.addChild(container1);
container1.addChild(circle1);
container1.addChild(circle2);

trace(container1.numChildren);   // 出力: 2
trace(container2.numChildren);   // 出力: 1
trace(circle1.numChildren);   // 出力: 0
trace(circle2.numChildren);   // 出力: 0


[訳者注*2] Spriteクラスについては、akihiro kamijo「SpliteクラスとMovieClipクラス」をご参照ください。

[訳者注*3] 作成されたSpriteインスタンスのcontainer1とcontainer2は、円が描画してあるものの、画面には表示されません。親のcontainer2が、タイムラインのディスプレイリストに属していないからです。

上記のメインタイムラインのフレームアクションにつぎのスクリプトを追加すると、container1とcontainer2に描画された円が画面に表示されます(図001)。また、4つのSpriteインスタンスにそれらを格納した変数と同じ名前を、インスタンス名として設定します。

スクリプト001■Spriteインスタンスをディスプレイリストに加えてインスタンス名を設定する

// 上記フレームアクションに追加
addChild(container2);
container1.name = "container1";
container2.name = "container2";
circle1.name = "circle1";
circle2.name = "circle2";

図001■タイムラインに表示されたふたつの円
Sprites

4つのSpriteインスタンスに名前をつけましたので、[Debug] > [List Object](オブジェクトのリストアップ)で、各インスタンスのパスを確認することができます。

[出力]パネルの表示:
ムービークリップ: フレーム=0 ターゲット="_level0.container2"
  ムービークリップ: フレーム=0 ターゲット="_level0.container2.container1"
    ムービークリップ: フレーム=0 ターゲット="_level0.container2.container1.circle1"
    ムービークリップ: フレーム=0 ターゲット="_level0.container2.container1.circle2"

Player
ActionScript 3.0/Flash Player 9以降。

関連項目
addChildAt()

出典
[ActionScript 3.0 Language Reference] > [Class DisplayObjectContainer] > [addChild () method]

参考
akihiro kamijo「DisplayObjectContainerクラス

_____

作成者: 野中文雄
作成日: 2006年7月5日


Copyright © 2001-2006 Fumio Nonaka.  All rights reserved.