2011-01-21 17 views
2

私は何をしようとしているのかを完全に説明します。AS3:ディープネストされたスプライトの親をステージから見つけるにはどうすればいいですか?

私は別個のSWFとしてビデオプレーヤーを持っています。このビデオプレーヤーでは、Spriteを拡張したVideoContainerクラスがあります。このクラスには、ビデオと特定のビデオボタンを持つコントロールバーが含まれています。

このSWFは別のメインSWFにロードされます。メニューには他のすべてのものの上にメニューがあります。ビデオSWFで「フルスクリーン」をクリックすると、メニューはVideoContainerオブジェクトの上に残りますが、すべてが円滑に進みます。

ロードされたSWFの表示順序を変更し、それをFullscreenのすべてのものの上に置き、Fullscreenが消えたときにそれを戻す方法が必要です。このすべては、ビデオプレーヤーの内部で行う必要があります。また、子供の設定が変更される可能性があります(動画プレーヤーはメインSWF内の別の場所に読み込むことができます)ので、一定の不変のパスを使用することはできません。

私はstage.getUpperMostParentOf(VideoContainer)のようなことをしたいと思います。何か案は?ありがとう。

答えて

5

読み込んだswfをもう一度追加できますか?メインのswfファイルから:

addChild(menu); // -- the menu sprite 
addChild(videoSWF); // -- the loaded swf containing the video player 

ステージはwhileループで表示ツリーまで「登る」ことであろうではありません最上位の親を見つけるための別のアプローチ。

var container:DisplayObjectContainer = videoContainer.parent; 
while(container.parent != null && containert.parent != stage) 
{ 
    container = container.parent 
} 

trace('uppermost parent: ' + parent); 

はおそらくあなたが望むものを達成するために、複数の方法がありますが、あなたの実際のコードを見ることなく、それがこの問題を解決する方法を正確に知ることは困難です。

+1

が、あなたの第二のアプローチは、はるかに簡単かつきれいです。ありがとうございました! –

+0

ニース、それはあなたのために働いてうれしい。 – JeremyFromEarth

0

私はこれを行って、非常に単純である...のVideoPlayerからきました:私は、カスタムバブルイベントを使用してこれを実行しようとしていた

var oldParent:DisplayObjectContainer; 
function goFullscreen() { 
    oldParent=parent; 
    stage.addChild(this); 
    stage.displayState=StageDisplayState.FULL_SCREEN; 
    stage.addEventListener(Event.RESIZE, resize); 
} 

function resize(e) { 
    if(stage.displayState!=StageDisplayState.FULL_SCREEN) { 
     stage.removeEventListener(Event.RESIZE, resize); 
     oldParent.addChild(this); 
    } 
} 
+1

基本的にはうまくいくはずですが、私の場合は、いくつかのaddedToStage、removedFromStageイベントリスナーがあります。 –

関連する問題