Мексиканский волновой эффект во Flash - PullRequest
1 голос
/ 26 августа 2011

Я пытаюсь воспроизвести движение «мексиканской волны». Я использую Flash CS5 и AS2.

Я создал рисунок «перемычка» и анимировал его в клипе, чтобы он прыгнул один раз - вверх, а затем снова упал на землю. Я перенес клип на основную временную шкалу и повторил несколько раз, поэтому у меня есть ряд «перемычек». Я дал каждому экземпляру уникальный идентификатор. Затем я говорю каждому экземпляру клипа начать воспроизведение последовательно, используя следующий код:

var total_jumpers = 36;
var i = 0;
var jumpLag = 1000;

function do_jump(bottle) {
    jumper.play();
}

for( i=1; i<=total_jumpers; i++)
{
    var mcName:String = "b" + i;
    jump = setInterval(do_jump,jumpLag,this[mcName]);
    trace("Jumper " + mcName + ". Lag: " + jumpLag);
    jumpLag += 100;
}

clearInterval(jump);

stop();

В клипе я поместил stop () в последний кадр, чтобы попытаться остановить его зацикливание.

Так что это работает нормально, но клипы, кажется, зациклены - я не могу заставить их остановиться.

Буду благодарен за любые идеи и помощь.

1 Ответ

1 голос
/ 26 августа 2011

setInterval, вероятно, не лучший способ сделать это, потому что он повторяется непрерывно до тех пор, пока не будет вызван clearinterval. setInterval возвращает разные идентификаторы для каждого вызова - представьте себе уникальный идентификатор для каждого таймера.

Код, который вызывает clearInterval, фактически очищает только последний интервал. clearInterval должен вызываться для каждого идентификатора, возвращаемого setInterval. Для этого потребуется сохранить идентификаторы в массиве, а затем вызвать clearInterval для конкретного идентификатора после запуска анимации.

Лучший способ сделать это - использовать setTimeout (см. Flash.utils.setTimeout), потому что он запускается только один раз, а затем умирает, что означает, что вам не понадобится дополнительная логика для остановки таймера.

...