Tips

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を返します。
上記のようにループでオブジェクト表示を行っている時などに、とっても便利な方法ですね。

WEBアプリケーション関連 人気連載リンク

基礎からPHPWEBアプリ解発を学ぶなら・・
PHP基礎 連載

より実践的なWEBアプリ開発講座!Bootstrap活用を学ぶなら・・
魁!小野の塾 連載

Recent News

Recent Tips

Tag Search