Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Как автоматизировать показ ролика (http://www.flasher.ru/forum/showthread.php?t=208066)

Nick Rogalev 01.06.2014 23:27

Как автоматизировать показ ролика
 
Здравствуйте.
Создаю простенькую презентацию, в основном используя временную шкалу, эффекты движения и кнопки, которые при нажатии переключаются на определеный кадр.

Грубо говоря так:
Раздел 1 - N кадров, затем стоит команда остановки воспроизведения
Раздел 2 - N кадров, затем стоит команда остановки воспроизведения
итд.

Есть необходимость создать кнопку "Автоматический показ"
Которая должна работать примерно так:
Показывает Раздел 1
Потом ждет какое-то время,
Потом переходит к разделу 2
Ждет какое-то время
Переходит к следующему разделу.
итд.

Подскажите пожалуйста, как это можно реализовать?
Мои знания достаточно примитивны ,и очень не хочется дублировать еще раз всю презентацию ,без остановок между кадрами для переключения.

Спасибо.

samana 02.06.2014 00:19

Не уверен, что это лучший вариант, но попробуйте его. Предполагается, что основная анимация расположена на сцене (_root). Этот код нужно поместить в первом кадре. Вам нужно лишь записать нужные числа в массив stopFrames и повесить на кнопки авто-воспроизведения метод autoplay() и на кнопку остановки метод autoPlayStop().

Код AS1/AS2:

var stopFrames:Array = [1, 5, 10, 15]; // номера кадров на которых нужно задержаться
var currentFrameStop:Number = 0; // индекс текущего кадра (индекс массива созданного выше)
 
var timePaused:Number = 3000;// три секунды
var timeout:Number; //переменая для остановки setTimeout
 
stop(); // остановить воспроизведение
autoplay(); // запкаем автоПлей
 
//остановить автоПлей
function autoPlayStop()
{
        clearTimeout(timeout);
    delete _root.onEnterFrame;
}
 
//автоПлей
function autoplay()
{
        //Каждый кадр проверяем
        _root.onEnterFrame = function()
        {
                //если текущий кадр совпадает со значением в массиве
                if (_currentframe == stopFrames[currentFrameStop])
                {
                        // прибавляем индекс
                        currentFrameStop++;
                        // если это было последнее значение в массиве, то переходим в начало массива
                        if (currentFrameStop == stopFrames.length - 1)
                        {
                                currentFrameStop = 0;
                        }
                        //запускаем автоПлей через три секунды
                        timeout=setTimeout(autoplay,timePaused);
                        //удаляем ентерФрейм
                        delete _root.onEnterFrame;
                }
 
                //если текущий кадре НЕ совпадает со значением из массива
                else
                {
                        //если это конец временной шкалы, то переходим в начало
                        if(_currentframe == _totalframes)
                        {
                                gotoAndStop(1);
                        }
                        //а если это не конец временной шкалы, то переходим на следующий кадр.
                        else
                        {
                                nextFrame();
                        }
 
                }
        }


Nick Rogalev 02.06.2014 06:47

Спасибо, а как лучше сделать, если
Раздел 1 начинается на кадре 25 ,затем идет анимация появления, и затем он останавливается, предположим, на 50 кадре ,командой "СТОП"
Раздел 2 начинается на 51 и длится, скажем до 70
итд

Кнопки соответственно переключают презентацию на слайды 25, 70

а кнопка автоматического показа, должна срабатывать по нажатию и делать так:
1. Проиграть кадры с 25 по 50 ,остановиться на N секунд
2. Переключиться на кадр 51 ,проиграть до 70 ,задержаться на N секунд
итд

Исходник во FLASH CS4

samana 02.06.2014 14:57

Тогда вы можете сделать немного по-другому не используя код выше. Заведите булеву переменную, которая будет указывать на включённое/выключенное автовоспроизведение. А на тех кадрах (между слайдами), где у вас команда stop, допишите условие, в котором проверяйте - включено ли автровоспроизведение. И если оно включено, то тем же setTimeout переходите на следующий слайд презентации.
код в первом кадре вашего приложения
Код AS1/AS2:

stop();
// установка автоплей в ДА/НЕТ
var autoplayOn:Boolean=false;
// id для setTimeout, чтобы была возможно остановить его при случае
var timeoutId:Number;
 
//для кнопки включить автопоспроизведение
play_btn.onPress=function(){
        autoplayOn=true;
        play(); // тут скорее всего надо будет добавить условий
        //наслучай если презентация начинается с какого-то определённого кадра,
        //а не с начала ролика
}
//для кнопки вЫключить автовоспроизвведение
stop_btn.onPress=function(){
        autoplayOn=false;
        clearTimeout(timeoutId)
}

код в кадрах, где у вас команда stop, между слайдами
Код AS1/AS2:

stop();
if(autoplayOn)
{
        timeoutId=setTimeout(function(){play()}, 3000);
}

и если на последнем слайде, при включенном автоПлее необходимо будет перейти на первый слайд, тогда код в том кадре немного измените, например
код последнего слайда, для перехода на первый
Код AS1/AS2:

stop();
if(autoplayOn)
{
        timeoutId=setTimeout(function(){gotoAndStop(номер первого слайда)}, 3000);
}

Работает ли это всё корректно я точно не знаю, но по идее должно.

Nick Rogalev 02.06.2014 14:59

Спасибо, большое. Попробую!


Часовой пояс GMT +4, время: 17:53.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.