Использование переменной, чтобы разрешить одновременное воспроизведение только одного видео

Недавно я создал проект с четырьмя кнопками. Каждая кнопка добавляет на сцену проигрыватель FLV и воспроизводит видео. Во время тестирования я заметил, что при нажатии другой кнопки до того, как первая функция завершит загрузку фильма, будут воспроизводиться ДВА фильма.

Есть ли более эффективный способ справиться с этим? Я чувствую, что здесь много избыточного кода, есть ли лучший способ сделать следующее:

  • Первая кнопка нажата
  • Загрузить первое видео
  • Игнорировать всех других прослушивателей событий, пока фильм не закончится, или пока пользователь не закроет видео (нажимает, чтобы закрыть)

Сначала я подумал, что было бы неплохо создать две функции: одну, которая удаляет все прослушиватели событий, а другую, которая добавляет всех прослушивателей событий. При нажатии кнопки перед загрузкой FLVPlayback удалите все прослушиватели событий. Когда фильм ЗАВЕРШЕН, снова добавьте всех слушателей. Это кажется утомительным и очень неэффективным.

Я написал следующий код в качестве примера того, что пытаюсь сделать. (Тем не менее, каждый раз выводится одна и та же строка «One Can play»).

var canLaunchOne:Boolean;
var canLaunchTwo:Boolean;
var canLaunchThree:Boolean;
var canLaunchFour:Boolean;

buttonMCOne.addEventListener(MouseEvent.MOUSE_DOWN, playMovieOne);
buttonMCTwo.addEventListener(MouseEvent.MOUSE_DOWN, playMovieTwo);
buttonMCThree.addEventListener(MouseEvent.MOUSE_DOWN, playMovieThree);
buttonMCFour.addEventListener(MouseEvent.MOUSE_DOWN, playMovieFour);

trace(canLaunchTwo);

function playMovieOne(event:Event):void {
    canLaunchOne = true;
    canLaunchTwo = false;
    canLaunchThree = false;
    canLaunchFour = false;
    trace(canLaunchOne);
    playTheRightVideo();

}

function playMovieTwo(event:Event):void {
    canLaunchOne = false;
    canLaunchTwo = true;
    canLaunchThree = false;
    canLaunchFour = false;
    playTheRightVideo();

}

function playMovieThree(event:Event):void {
    canLaunchOne = false;
    canLaunchTwo = false;
    canLaunchThree = true;
    canLaunchFour = false;
    playTheRightVideo();

}

function playMovieFour(event:Event):void {
    canLaunchOne = false;
    canLaunchTwo = false;
    canLaunchThree = false;
    canLaunchFour = true;
    playTheRightVideo();

}

function playTheRightVideo():void {
    if(canLaunchOne = true){
        trace("One Can Play"); // do all that video stuff for video one
    } else if(canLaunchTwo = true){
        trace("Two Can Play"); // do all that video stuff for video one
    } else if(canLaunchThree = true){
        trace("Three Can Play"); // do all that video stuff for video one
    } else {
        trace("Four Can Play");
    }
}

Я попробовал этот код, и у меня он "заработал", но каждая функция всегда устанавливает для canLaunchMovie значение true ...

import flash.events.Event;

var canLaunchMovie:Boolean;

buttonMCOne.addEventListener(MouseEvent.MOUSE_DOWN, playMovieOne);
buttonMCTwo.addEventListener(MouseEvent.MOUSE_DOWN, playMovieTwo);
buttonMCThree.addEventListener(MouseEvent.MOUSE_DOWN, playMovieThree);
buttonMCFour.addEventListener(MouseEvent.MOUSE_DOWN, playMovieFour);

function playMovieOne(e:Event):void {
    if(canLaunchMovie = true){
        this.canLaunchMovie = false;
        trace("One Can Play"); // do all that video stuff for video one
    } else {
        trace("I can't do that(play movie one) Dave");
    }
}

function playMovieTwo(e:Event):void {
    if(canLaunchMovie = true){
        this.canLaunchMovie = false;
        trace("Two Can Play"); // do all that video stuff for video one
    } else {
        trace("I can't do that(play movie two) Dave");
    }
}

function playMovieThree(e:Event):void {
    if(canLaunchMovie = true){
        this.canLaunchMovie = false;
        trace("Three Can Play"); // do all that video stuff for video one
    } else {
        trace("I can't do that(play movie three) Dave");
    }
}

function playMovieFour(e:Event):void {
    if(canLaunchMovie = true){
        this.canLaunchMovie = false;
        trace("Four Can Play"); // do all that video stuff for video one
    } else {
        trace("I can't do that(play movie four) Dave");
    }
}

person elCavador    schedule 06.05.2015    source источник
comment
Аргумент .. Значит, это обновление технически не работает. Я выполняю задание, которое всегда верно, а не выполняю проверку на равенство. Это работает, потому что каждая кнопка присваивает canLaunchMovie = true;   -  person elCavador    schedule 06.05.2015
comment
В отличие от сайтов форумов, мы не используем "Спасибо", "Любая полезная помощь" или подписи на Stack Overflow. См. Если «Привет», «спасибо» слоганы и приветствия убирать из сообщений?. Кстати, спасибо заранее, а не заранее.   -  person John Saunders    schedule 11.05.2015


Ответы (1)


Вам не нужно иметь более одного flvplayback. Вам нужно только изменить source вашего flvplayback.

person Andre Lehnert    schedule 10.05.2015