Как я могу остановить воспроизведение фильма, когда нажимаю на следующий кадр - FLASH CS4? - PullRequest
1 голос
/ 08 апреля 2010

У меня есть четыре фрагмента ролика (.f4v) в 4 кадрах в фильме с кнопками watch . Эти f4vs были импортированы в основной контейнер фильма, в котором есть кнопки next и previous. Однако, если я проигрываю фильм, а затем нажимаю следующий кадр, фильм продолжает воспроизводиться в фоновом режиме. Как я могу купить это? Приведенный ниже код показывает сценарий действия для одного из фрагментов ролика, а затем сценарий действия в основном фильме. Я новичок во флеше, поэтому вся помощь приветствуется. Большое спасибо.

stop();

watch1_btn.addEventListener(MouseEvent.CLICK, playMovie1);

function playMovie1(event:MouseEvent):void
{
    movie1_mc.play();
}

// Button Listeners
next_btn.addEventListener(MouseEvent.CLICK, nextSection);
prev_btn.addEventListener(MouseEvent.CLICK, prevSection);

function nextSection(event:MouseEvent):void {

    var thisLabel:String = pages_mc.currentLabel; // gets current frame label as string
    var thisLabelNum:String = thisLabel.replace("sct", ""); // cuts the leading letters off of the number
    var curNumber:Number = Number(thisLabelNum); // converts that string number to a real number
    if (curNumber < 5){
        var nextNum:Number = curNumber + 1; // adds 1 to the number so we can go to next frame label
        pages_mc.gotoAndStop("sct" + nextNum); // This allows us to go to the next frame label
        }
}
///////////////////////////////////////////////////////////////////////////
function prevSection(event:MouseEvent):void {

    var thisLabel:String = pages_mc.currentLabel; // gets current frame label as string
    var thisLabelNum:String = thisLabel.replace("sct", ""); // cuts the leading letters off of the number
    var curNumber:Number = Number(thisLabelNum); // converts that string number to a real number
    var prevNum:Number = curNumber - 1; // subtracts 1 from the number so we can go to next frame label
    pages_mc.gotoAndStop("sct" + prevNum); // This allows us to go to the previous frame label

}

Ответы [ 2 ]

1 голос
/ 09 апреля 2010

непосредственно перед функцией gotoAndStop (), просто поместите в movie1_mc.stop (); команда остановит клип перед сменой кадра.

только с точки зрения развития, если вы только меняете видео, подумайте об использовании только одного кадра и добавлении / удалении видео со сцены, используя addChild () и removeChild (). обычно все намного проще контролировать, как это делается, и это хороший инструмент для изучения.

0 голосов
/ 02 июля 2013

У вас есть отличная логика для перемещения между кадрами, но есть много ненужного. Можно получить целочисленное значение текущего кадра за один шаг, используя currentFrame. Это может помочь немного очистить ваш код, так как вам больше не нужно разбивать строку, а затем преобразовывать в число.

function nextSection(event:MouseEvent):void {
// This allows us to go to the currentframe plus one's label in one line of code
        pages_mc.gotoAndStop("sct" + (pages_mc.currentFrame + 1)); 
}

function prevSection(event:MouseEvent):void {
// This allows us to go to the currentframe minus one's label in one line of code
    pages_mc.gotoAndStop("sct" + (pages_mc.currentFrame - 1)); 
}

Эти функции будут перемещаться к предыдущему и следующему кадрам, но не обладают всеми необходимыми функциями (такими как остановка на кадре 5 или кадре 1 (что не включено в ваш исходный код)) ... I Позвольте добавить, если вы хотите их использовать.

Но есть еще более простой способ перехода между кадрами. AS3 имеет функции nextFrame() и prevFrame(), которые точно воспроизводят их звучание (переход к следующему кадру и возврат к предыдущему кадру соответственно).

function nextSection(event:MouseEvent):void {
// This allows us to go to the next frame if we aren't 
// already at frame 5
   if(pages_mc.currentFrame<5){
        pages_mc.nextFrame();
   }
}

function prevSection(event:MouseEvent):void {
// This allows us to go to the previous frame if we aren't 
// already at frame 1
   if(pages_mc.currentFrame>1){
        pages_mc.prevFrame();
   }
}

Ах. Так освежает. Простой, функциональный код.


Теперь перейдем к вашему актуальному вопросу.

mc.stop();, (где mc - заполнитель для вашего фактического фрагмента ролика) будет «останавливать» фрагмент ролика. Но слово «стоп» на самом деле не лучшее слово для использования здесь. Функция stop() в AS3 работает больше как кнопка паузы, «пауза» клипа в кадре, который воспроизводился при вызове функции.

Когда вы вернетесь к кадру любого «приостановленного» фрагмента ролика, основываясь на вашем коде, вы сможете воспроизводить его только с той точки, в которой он был приостановлен.

function nextSection(event:MouseEvent):void {
   if(pages_mc.currentFrame<5){

       //"pause" the movie clip (only if moving to another frame)
        movie1_mc.stop();

        pages_mc.nextFrame();
   }
}

function prevSection(event:MouseEvent):void {
   if(pages_mc.currentFrame>1){

       //"pause" the movie clip (only if moving to another frame)
        movie1_mc.stop();

        pages_mc.prevFrame();
   }
}

Я бы рекомендовал использовать некоторые встроенные функции flash для воспроизведения файлов .f4v / .flv. Посмотрите документы Adobe на FLVPlayback и прочитайте этот ответ , чтобы увидеть пример того, как его использовать.

FLVPlayback заменит видеоклипы в вашем файле ссылками на файлы на вашем компьютере (или сервере), что сделает ваш флэш-файл намного меньше. Он также имеет свои собственные элементы управления фильмом, так что пауза, остановка, воспроизведение и т. Д. Сразу становятся доступными, никаких событий слушателя не требуется.

Веселись и экспериментируй!

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...