ActionScript3.0 ぷちクイズ 第3問:addChild済のオブジェクトだけremoveChildする


addChild済のオブジェクトだけremoveChildする

様々なオブジェクトを表示リストに追加する際に利用する関数として、addChildがあります。
こんな風に使います。

for(var i=0;i<10;i++){
 stage.addChild(video["vid"+i]);
}

逆に表示リストから削除する際に利用する関数に、removeChildがあります。
こんな風に使います。

for(var i=0;i<10;i++){
 stage.removeChild(video["vid"+i]);
}

このremoveChildは、既にaddChildされているオブジェクトに対して実行しなければエラーになってしまいます。
こんなエラーが表示されます。
【ArgumentError: Error #2025: 指定した DisplayObject は呼び出し元の子でなければなりません。】

では、今回の問題です。
removeChildを実行する前に、オブジェクトがaddChildされているかをチェックする処理を追加してみましょう。

<問題>
以下のスクリプトを実行するとエラーが発生します。
原因はaddChildされていないオブジェクトをremoveChildしようとしているためです。
forループ内で、addChildしているオブジェクトのみremoveChildするよう条件を追加しなさい。

import flash.media.*;
import flash.display.*;

var video:Array = new Array();

for(var i=0;i<10;i++){
 video["vid"+i] = new Video();
 video["vid"+i].x = 70*i;
 video["vid"+i].y = 10*i;
 video["vid"+i].width = 40;
 video["vid"+i].height = 30;
}

stage.addChild(video["vid2"]);
stage.addChild(video["vid4"]);
stage.addChild(video["vid6"]);
stage.addChild(video["vid8"]);

for(var j=0;j<10;j++){
 stage.removeChild(video["vid"+j]);
}

答えは以下です。



<答え>
~~~~~

for(var j=0;j<10;j++){
 if(stage.contains(video["vid"+j])){
  stage.removeChild(video["vid"+j]);
 }
}

※編集箇所をピックアップして記載しています。
~~~~~
これでOK。

containsメソッドは、addChildされていればtrue、いなければfalseを返します。
上記のようにループでオブジェクト表示を行っている時などに、とっても便利な方法ですね。

  • このエントリーをはてなブックマークに追加

PAGE TOP