2011-01-21 74 views
2

我會給我一個完整的解釋我想要做的。AS3:如何從舞臺找到深嵌套雪碧的父母?

我有一個視頻播放器作爲一個單獨的SWF。在這個視頻播放器中,我有一個VideoContainer類,它擴展了Sprite,它包含視頻和帶有特定視頻按鈕的控制欄。

此SWF加載到另一個主SWF中,該SWF具有位於其他任何位置的菜單。當我點擊視頻SWF中的「全屏」時,除了菜單保留在VideoContainer對象的頂部,一切都很順利。

我需要一種方法來更改加載的SWF的顯示順序,將其放在全屏幕上的其他所有內容的頂部,並在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

我試圖做到這一點使用自定義的冒泡事件,但你的第二個方法是更簡單和更清潔。謝謝! – 2011-01-21 09:54:00

+0

不錯,很高興它爲你工作。 – JeremyFromEarth 2011-01-21 09:55:31

0

我這樣做,是相當直接的...從錄像機:

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); 
    } 
}