2010年07月19日

ムービークリップの配置と削除

覚書です。


addChildで配置したMCから、自身を削除する命令を出したい場合の処理

難儀なことで removeChild(this); とか書くと、エラーが出る。
削除したいターゲットが、発信元の子オブジェクトじゃないと受け付けてくれないんだとさ。。。
つまりステージに配置した場合は、removeChild()はメインタイムラインに書かなくちゃいけない。

で、以下の二つを試してみる。
(その1)配置したbtnボタンで削除
(その2)特定のフレームまで再生されたら削除


(1)配置用のムービークリップ:childを作成。
アクションスクリプト用に書き出しにチェックを入れる。
addChild.bmp

(2)ステージにchildを配置
メインタイムラインに以下を記述
//インスタンス作成
var child_mc:child = new child();

//ルートに表示オブジェクトを追加
addChild(child_mc);

//child_mcのbtn処理(その1用)
child_mc.btn.addEventListener('click',onClick);
function onClick(event:MouseEvent):void{
removeChild(child_mc);
removeEventListener('click', onClick);
}

//child_mcを消す関数(その2用)
function reChild():void{
removeChild(child_mc);
}



その1の処理は、これで終わり。
ボタンを押すとchild_mcが消える。

その2は、childムービークリップ内の、特定のフレームでreChild関数を呼び出す処理を加える。
MovieClip(parent).reChild();
this.stop();


最後のthis.stop();を書かないでいると、消えてから暫くして次のようなエラーが出る。
TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。
at child/frame19()

1回目は実行されたけど、ループして2回目はchild_mcが存在しないのでエラーが出たということだろうか。
だとすれば、消えたけど生き続けていて、スクリプトは実行されてるんだ。
childの中に、EnterFrameなどの処理を書いている場合、removeChild()と同時にEnterFrameの処理をしているイベントリスナーも削除しなければ、延々と処理しつづけることになるので注意!



posted by K at 13:58| Comment(0) | スクリプト | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。