Как использовать таймер AS3 для выполнения и зацикливания видеоклипов различной длины? - PullRequest
0 голосов
/ 13 мая 2011

Как мне использовать таймер для одновременного запуска нескольких видеоклипов, а затем зациклить их, если они имеют разную длину, чтобы они снова запускались синхронно?

Например, например, при t = 0 запускаются 3 видеоролика. Длина видеоролика 1 составляет 3 секунды. Длина видеоролика 2 составляет 6 секунд. Продолжительность видеоролика 3 составляет 10 секунд. Видеоклип 1 заканчивается до видеоклипов 2 и 3, но я не хочу, чтобы он перезагружался до тех пор, пока не закончатся остальные.

Кроме того, можно ли установить обратный отсчет, чтобы ролики фильма запускались не по истечении определенного времени, а по истечении определенного времени? Например, вместо таймера обратного отсчета с 10 секунд, а затем воспроизведения, он вместо этого ведет обратный отсчет до, скажем, 12:00 вечера, а затем воспроизводит видеоклип. Если это возможно, может кто-нибудь показать мне, как?

Спасибо заранее.

Ответы [ 2 ]

0 голосов
/ 13 мая 2011

Используйте этот код для самого длинного клипа:

longestClip.addFrameScript(longestClip.totalFrames, restartAllMyClips);

restartAllMyClips - функция, которая перезапустит их все.

Имеет смысл?

Что касается времени - вы можете заставить этот код выше вызывать функцию под названием waitAndPlay (time)

, в основном в этой функции вы можете вычислить количество времени между этим моментом и временем, которое выпередать в качестве параметра.

Затем вы просто установите таймер для этой продолжительности.Настройте прослушиватель на этом таймере для выполнения restartAllMyClips.

, так что-то вроде этого:

var waitTimer:Timer = new Timer(duration, 1);
waitTimer.addEventListener(TimerEvent.TIMER_COMPLETE, restartAllMyClips);
waitTimer.start();

Вот некоторая информация о addFrameScript () - http://blog.rackdoll.nl/?p=118

0 голосов
/ 13 мая 2011

Вот как я бы ответил на ваш первый вопрос - просто добавьте все ваши анимационные мувиклипы в массив mcs.

var mcs:Array = [mc1,mc2,mc3];

// work out the longest running MovieClip
var longest:MovieClip = mcs[0];

var i:MovieClip;
for each(i in mcs)
{
    if(i.totalFrames > longest.totalFrames) longest = i;

    i.addEventListener(Event.ENTER_FRAME, animation);
}

/**
 * Check animation progress on each MovieClip
 */
function animation(e:Event):void
{
    var m:MovieClip = MovieClip(e.target);

    if(m.currentFrame == m.totalFrames)
    {
        m.stop();

        if(m == longest)
        {
            var i:MovieClip;
            for each(i in mcs)
            {
                i.gotoAndPlay(1);

                // your own actions here
                // for when all animation completes
            }
        }
    }
}

Что касается последнего вопроса, я не уверен, почему вы хотели бы сделать это, но вот достаточно простой подход:

var d:Date = new Date();
var time:String = d.getHours() + ":" + d.getMinutes();

var ran:Boolean = false;
if(time == "12:00" && !ran)
{
    ran = true;
    // being your animations etc
}
...