Flash AS2 анимация продолжается в нечетные моменты, если фильм загружается и выгружается быстро?

У меня есть флеш-файл с тремя основными кнопками сверху. При нажатии кнопки временная шкала перемещается к тому кадру (обозначенному меткой), который загружается в конкретный внешний SWF, соответствующий кнопке. Эти фильмы загружаются в тот же пустой фрагмент ролика, который называется «презентация», используя:

loadMovie("splash.swf","presentation"); 

В одном из загруженных извне SWF есть анимация движения (в первом кадре с использованием TweenLite), которая выполняется после загрузки SWF. Проблема в том, что когда я нажимаю кнопку и перехожу к другому кадру (который загружает другой SWF-файл) в середине этой анимации и возвращаюсь на ту же страницу с анимацией. Анимация начинается посередине, как будто она идет сзади, например, исчезают вещи, которые еще не должны исчезать, и т. Д.? Любая подсказка относительно того, почему?

РЕДАКТИРОВАТЬ: Может, в этом причина? Код анимации в первом кадре загруженного SWF:

//Animate the bouquet
var bFadeIn:Tween = new Tween(bouquet,"_alpha",Back.easeInOut,0,100,1,true); //106.95

bFadeIn.onMotionFinished = function() {
    for(var i=1; i < 12; i++) {
        TweenLite.to(bouquet["olddot"+i], 1, {_x:96.25, _y:94.05, _alpha: 0, ease:Back.easeInOut});
    }

    TweenLite.to(bouquet.chip, 1, {_alpha:0, delay:1, onComplete:newDotsAnimate}); 
}

function newDotsAnimate() {
    TweenLite.to(bouquet.phone,1, {_alpha:100, ease:Back.easeOut, delay:.3});
    bouquet.phone._visible = true;
    TweenLite.to(bouquet.newdot1, 1, {_alpha:100, _x:127.95, _y:23, ease:Back.easeOut, delay:1});
    TweenLite.to(bouquet.newdot2, 1, {_alpha:100, _x:226.45, _y:101.50, ease:Back.easeOut, delay:1});
    TweenLite.to(bouquet.newdot3, 1, {_alpha:100, _x:188.70, _y:216.60, ease:Back.easeOut, delay:1});
    TweenLite.to(bouquet.newdot4, 1, {_alpha:100, _x:59.95, _y:216.90, ease:Back.easeOut, delay:1});
    TweenLite.to(bouquet.newdot5, 1, {_alpha:100, _x:26.95, _y:100.95, ease:Back.easeOut, delay:1});

    TweenLite.to(bouquet_instructions,1,{_alpha:100}); //fade in the instructions, then fade them out
}

person lislis    schedule 02.02.2012    source источник


Ответы (2)


Анимация начинается на полпути, как будто она идет сзади? Любая подсказка относительно того, почему?

Ваш загруженный SWF остановится на том месте, где вы его оставили. Если вернуться к кадру, показывающему его, он возобновится с того места, на котором остановился, если вы не вызвали gotoAndStop (1). Это связано с тем, что SWF-файл не выгружается и не перезагружается каждый раз, когда вы перемещаетесь по временной шкале.

Лучше всего, если возможно, создать метод cleanup () или hide () для загруженных файлов SWF, который будет вызываться всякий раз, когда основной SWF уходит от них. Таким образом загруженное содержимое SWF может отключиться (прекратить воспроизведение звуков, прекратить воспроизведение на временной шкале и т. Д.). Реализуя эту функцию сами, загруженные SWF берут на себя ответственность за свои условия «сброса», и все, что нужно сделать для загрузки SWF, - это вызвать «loadedSWF.cleanup ()».

person Ross Smith    schedule 02.02.2012
comment
Я немного отредактировал свой вопрос для этого. Думаю, мне интересно, так как я читал на форумах Kirupa, что если фильм загружается в то же пустое место, он должен автоматически выгружать текущий фильм? Остановит ли это воспроизведение предыдущего фильма или мне придется вручную выгружать и останавливать фильм, используя предложенный вами метод очистки? - person lislis; 02.02.2012
comment
Если вы используете ключевой кадр Flash для создания MovieClip (не AS2), а затем переходите к другому кадру, где MovieClip не имеет кадров - тогда да, этот клип будет удален и остановлен. Однако вы загрузили новый SWF-файл и прикрепили его к временной шкале. Я думаю, это влияет на вашу ситуацию. Поскольку он был добавлен с помощью загрузчика, а не из ключевого кадра, он никогда не удаляется из-за навигации по временной шкале. Признаюсь, я не очень много работал с AS2 пару лет, поэтому могу ошибаться. - person Ross Smith; 02.02.2012

Вероятно, потому что он все еще работает в фоновом режиме. как выглядит ваше игровое событие? вы делаете "gotoAndPlay (1)" при загрузке?

если вы хотите, чтобы этого не происходило, можно было бы просто подключить событие остановки к нажатию кнопки. Итак, вот так (прошло несколько лет с тех пор, как я использовал as2, так что терпите меня):

button2.onMouseUp(){
       loadedMovie.gotoAndStop(1);
}

Еще более понятным способом было бы написать функцию, которая останавливала бы все внешние фильмы при переходе от одного к другому.

тогда, когда вы вернетесь, ваше игровое событие должно начаться правильно.

person mrBallistic    schedule 02.02.2012