AS3 — Загрузка нескольких видео в один контейнер — addChild removeChild

Это функция, которая загружает определенное видео в контейнер MovieClip с номером 0.0, используя класс видео.

public var mainVideo:SimpleVideo;

public function loadVideo(videoString:String) :void{
    mainVideo = new
    SimpleVideo("videos/"+videoString+".flv","",true,video_container.positionMc);
    video_container.addEventListener(MouseEvent.MOUSE_DOWN,controlVideoPlayer);
    addChild(mainVideo);
    trace('adding new video to container');
}

Я бы хотел проверять каждый раз, когда загружается видео, чтобы увидеть, загружено ли уже другое видео. А если есть, то удалить его, и добавить новое видео.

Я пытался использовать removeChild() разными способами, но, похоже, это работает неправильно.

Буду ли я использовать removeChild(mainVideo)? video_container.removeChild(mainVideo)? И как я могу проверить, существует ли уже существующий mainVideo?

Любая помощь будет принята с благодарностью!

-Update- Если я попытаюсь использовать removeChild(mainVideo), я получу эту ошибку:

TypeError: Ошибка № 2007: дочерний параметр должен быть ненулевым.
в flash.display::DisplayObjectContainer/removeChild()
в Main/removeVideo() в MethodInfo-127()


person user2662373    schedule 07.08.2013    source источник
comment
Куда вы добавляете removeChild(mainVideo)? Можете ли вы обновить свой код?   -  person putvande    schedule 08.08.2013


Ответы (2)


Если вы добавите видео в мувиклип-контейнер, а не на сцену, и этот контейнер имеет только один экземпляр SimpleVideo в своем списке отображения за раз, вы можете сделать:

if( myVideoContainer.numChildren > 0 )
{
    myVideoContainer.removeChild( myVideoContainer.getChildAt( 0 ) );
}

Однако большая проблема заключается в том, как класс SimpleVideo, который вы используете, очищается. Большинство видеоклассов имеют функцию очистки или уничтожения, которая удаляет прослушиватели и очищает netStream. Я думаю, вам нужно будет вызвать что-то подобное, а также удалить экземпляр видео из контейнера.

person Ribs    schedule 07.08.2013

Я надеюсь, что этот ответ может помочь вам

--> Буду ли я использовать removeChild(mainVideo) ? video_container.removeChild(mainVideo) ?

вы должны использовать функцию removeChild, но вам нужно знать, кто является родителем mainVideo, и вызывать эту функцию его родителя, в вашем случае, я думаю, video_container не является родителем, потому что это переменная рядом с mainVideo, и вы добавляете mainVideo в экземпляр класс, который имеет функцию loadVideo

иногда вы можете использовать mainVideo.parent.removeChild(mainVideo), не лучший подход, но он работает, лучше знать, кто является родителем, и вызывать функцию removeChild() явно для этого "родителя"

--> смогу ли я проверить, существует ли уже существующее основное видео?

ну, вы можете сделать простое if(mainVideo != null) { .. }, потому что в функции loadVideo вы каждый раз создаете новые экземпляры, это означает, что если вы вызвали хотя бы один раз эту функцию, тогда условие if должно быть истинным, что означает, что у вас уже есть mainVideo

--> TypeError: Error #2007: Parameter child must be non-null.

это означает, что ваше mainVideo не создано, потому что я предполагаю, что вы еще не вызвали loadVideo(), поэтому @putvande попросил вас предоставить дополнительный код, нам нужно увидеть, где и когда вы вызываете removeChild()

person Rodislav Moldovan    schedule 08.08.2013