AS3: Как найти родителя глубоко вложенного спрайта со сцены? - PullRequest
2 голосов
/ 21 января 2011

Я дам полное объяснение того, что я пытаюсь сделать.

У меня есть видеопроигрыватель в виде отдельного SWF. В этом видеоплеере у меня есть класс VideoContainer, расширяющий Sprite, который содержит видео и панель управления с определенными кнопками видео.

Этот SWF-файл загружен в другой основной SWF-файл, который имеет меню поверх всех остальных. Когда я нажимаю «Полный экран» в видео SWF, все идет гладко, за исключением того, что меню остается поверх объекта VideoContainer.

Мне нужен способ изменить порядок отображения загруженного SWF-файла, поместить его поверх всего остального в полноэкранном режиме и вернуть обратно при выключении полноэкранного режима. Все это нужно сделать внутри видеоплеера. Кроме того, конфигурация дочерних элементов может измениться (видеоплеер может быть загружен в разных местах основного SWF-файла), поэтому я не могу использовать определенный неизменный путь.

Я бы хотел сделать что-то вроде stage.getUpperMostParentOf(VideoContainer). Есть идеи? Благодаря.

Ответы [ 2 ]

5 голосов
/ 21 января 2011

Можете ли вы просто добавить загруженный 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 );

Вероятно, есть несколько способов выполнить то, что вы хотите, но, не видя вашего реального кода, трудно точно понять, как это решить.

0 голосов
/ 21 января 2011

Я сделал это и довольно просто ... от видеоплеера:

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