サイトトップ

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

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

DisplayObjectContainer.removeChild()メソッド

ID: FN0705002 Product: Flash

Platform: All
Version: Flash 9 and above/ActionScritp 3.0

シンタックス
public function removeChild(child:DisplayObject):DisplayObject

引数
child:DisplayObject ― 削除するDisplayObjectインスタンス。

戻り値
DisplayObjectchildパラメータとして渡されたDisplayObjectインスタンス。

例外のスロー
ArgumentErrorchildパラメータがこのオブジェクトの子ではなかった場合にスローされます。

説明
childに指定されたDisplayObjectインスタンスを、DisplayObjectContainerインスタンスの子のリストから削除します。削除された子のparentプロパティは、nullに設定されます。そして、その子に対する参照が他に存在しなければ、そのオブジェクトはガベージコレクションの対象となります。DisplayObjectContainer内で、その子より前にあるDisplayObjectは、インデックス位置が1減少します[*1]

ガベージコレクタは、使われていないメモリスペースをFlash Playerが再割当てする機能です。変数やオブジェクトがもはや有効に参照されておらず、どこにも保持されていないとき、ガベージコレクタはそれらの変数やオブジェクトを収集して、それらに対する他の参照が存在しなければ、確保されていたメモリスペースを解放します[*2]

[訳者注*1] DisplayObjectContainerインスタンスが子のDisplayObjectを保持するディスプレイ(表示)リスト内のインデックスは、配列(Array)と同じく0から始まる整数で、数字が大きいほど前面に位置します。

[訳者注*2] ガベージコレクションおよびガベージコレクタについては、IT用語辞典バイナリ「ガベージコレクション」「ガベージコレクタ」およびWikipedia「ガベージコレクション」をご参照ください。


つぎの例は、containerという名前のDisplayObjectContainerを作成したうえで、ふたつのDisplayObjectをcontainerにその子として加えます。そして、イベントリスナーをcontainerオブジェクトに登録し、ユーザーがcontainerの子のオブジェクトをクリックしたとき、removeChild()メソッドによりそのクリックされたオブジェクトをcontainerの子のリストから削除します[*3][*4]

import flash.display.DisplayObject;
import flash.display.Sprite;
import flash.events.MouseEvent;

var container:Sprite = new Sprite();
addChild(container);

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(120, 40, 40);

container.addChild(circle1);
container.addChild(circle2);

container.addEventListener(MouseEvent.CLICK, clicked);

function clicked(event:MouseEvent):void {
  container.removeChild(DisplayObject(event.target));
}


[訳者注*3] 上記サンプルスクリプトは、Flashドキュメント(ムービー)ファイルのフレームアクションに設定します。[ムービープレビュー]を実行すると、円のグラフィックをもつふたつのSpriteインスタンスが表示されます(図001)。

図001■ステージに表示されたふたつの円のSpriteインスタンス
ふたつの円

それぞれをクリックすると、そのSpriteが親DisplayObjectContainerインスタンスcontainerのディスプレイ(表示)リストから削除され、画面から消えます。

[訳者注*4] SpriteインスタンスをDisplayObjectContainerインスタンスのディスプレ(表示)イリストから削除しても、「説明」に述べられているとおり、Spriteインスタンスの参照が変数に保持されているかぎり、メモリは解放されません。

ふたつのSpriteインスタンスを完全にメモリから消去したいときには、DisplayObjectContainer.removeChild()メソッドによりインスタンスをディスプレイリストから削除したうえで、つぎのように変数の参照も破棄する必要があります。

circle1 = null;
circle2 = null;

Player
ActionScript 3.0/Flash Player 9以降。

出典
[ActionScript 3.0 Language and Components Reference] > [DisplayObjectContainer] > [removeChild() method]


作成者: 野中文雄
作成日: 2007年5月20日


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