みなさん、ハロウィン前のハッピー :)
今日の問題は、子オブジェクトを削除するときに表示される DisplayObject エラーです。ビデオ コンテナとビデオ コントロールを起動 (addChild) し、閉じるボタンを追加するコードがあります。閉じるボタンが正常に機能し、ビデオとコントロールが削除され、別のビデオを再度選択できるようになりましたが、2 回目の閉じるをクリックすると、次のエラーが表示されます。
ArgumentError: エラー #2025: 指定された DisplayObject は呼び出し元の子でなければなりません。flash.display::DisplayObjectContainer/removeChild() で
そこで、問題を videoContainer (ビデオ オブジェクトを保持する) を削除する場所に絞り込みました。
ビデオを再生するための私のコード:
public function videoSwitch(videoName):void
{
nv.closeOut();
nv.resetNav = false;
if (!videoPlaying)
{
vc = new VideoClass(videoName, videoHolder);
vc.addEventListener("KillMovie", removePlayer);
container.addChild(videoContainer);
container.addChild(vc);
//container.addChildAt(videoContainer, 1);
//container.addChildAt(vc, 2);
videoPlaying = true;
closeVideo();
}
else if (videoPlaying)
{
vc.clearSource();
container.removeChild(videoContainer);
container.removeChild(vc);
vc = new VideoClass(videoName, videoHolder);
vc.addEventListener("KillMovie", removePlayer);
container.addChild(videoContainer);
container.addChild(vc);
//container.addChildAt(videoContainer, 1);
//container.addChildAt(vc, 2);
closeVideo();
}
trace("videoPlaying = "+videoPlaying+"\r");
}
動画プレーヤーのコードを締めくくる: 私のコメントで、私が試した他のコードを見ることができますが、それでもエラーが発生します。
function closeVideo():void
{
closeBtn.visible = true;
closeBtn.x = 770;
closeBtn.y = 20;
closeBtn.buttonMode = true;
container.addChild(closeBtn);
closeBtn.addEventListener(MouseEvent.MOUSE_UP, closeButtonClicked);
function closeButtonClicked(event:MouseEvent):void
{
vc.clearSource();
container.removeChild(videoContainer);
//container.removeChildAt(videoContainer, 1);
container.removeChild(vc);
videoPlaying = false;
closeBtn.visible = false;
}
}
これで私のムービーは正常に動作しますが、このエラーがバックグラウンドで発生し (そして出力ウィンドウに表示され)、最終的に他の場所で問題が発生するのではないかと心配しています :(
これを見てくれてありがとう!:)
更新: 修正済み! 問題は、kill VC リスナーを削除したことですが、愚かな Close Button Mouse_Event リスナーを削除するのを忘れていました:(
function addCloseButton():void
{
container.addChild(closeBtn);
closeBtn.addEventListener(MouseEvent.MOUSE_UP, closeButtonClicked);
function closeButtonClicked(event:MouseEvent):void
{
videoPlaying=false;
vc.clearSource();
removeContainerChildren(); // <- thx Joel!
closeBtn.removeEventListener(MouseEvent.MOUSE_UP, closeButtonClicked);
//^ Forgot this line - thx Jotham!
container.removeChild(closeBtn);
}
}
このグラフィックが役立つかどうかはわかりませんが、