AS2→AS3間で、表示クラスの削除の方法も変わりました。
表示クラスとはMovieClipやSpriteの事で、SpriteはAS3から出来たMovieClipの元となるクラスです。

既知ですが簡単に整理します。(表示クラスは、以下、子と表記)

いずれも、基本的に再帰処理を用います。

AS2の場合、対象階層にfor..inをかけて子を列挙して消します。

for..inを利用した場合、以下のようになります。
for..inは対象階層に定義されているオブジェクトを列挙するため、MovieClipを削除するように条件分岐を行います。

プログラムからの生成では無く、ステージに予め配置したものは深度が負となります。
深度が負の場合、削除が効きません。
そのため、getDepth()で深度が負のものを正にして削除します。

objはMovieClip以外の型が入るかもしれないので、型定義はしていません。

/** * for..inで子を削除(AS2) */ var prop:String; var obj; for (prop in this) { obj = this[prop]; if (typeof(obj) == "movieclip") { if (obj.getDepth() < 0) obj.swapDepths(this.getNextHighestDepth()); obj.removeMovieClip(); } }

AS3の場合、対象階層の子の絶対数を元に消すことが可能です。

forを利用した場合、以下のようになります。
処理を実行する度に子の絶対数が減るので、インクリメントされるiをデクリメントする必要があります。

/** * forで子を全削除 */ var i:int; for (i = 0; i < numChildren; ++i) { removeChild(getChildAt(i)); --i; }

whileを利用した場合、以下のようになります。
実はforより短く書けます。

/** * whileで子を全削除 */ while (numChildren) { removeChildAt(0); }

再帰処理は大変便利ですが、再帰内に終了条件を明示しない場合は注意が必要です。
場合によっては再帰処理から抜け出せない場合もあるためです。
その点を注意して、効率良く使いたいですね。

HTML5飯