Просмотр полной версии : Вопрос про gotoAndPlay()
Интересует то, как будет работать ниже приведенная схема.
Допустим есть два кадра, в каждом из которых содержится много кода на ActionScript. Пусть клип дошел до второго кадра и в некоторый момент вызвал gotoAndPlay(1). Обрывется ли при этом выполнение кода из второго кадра? Если "нет", то когда начинает выполнятся код первого кадра? Нужно ли в подобной ситуации использовать exit; для прерывания работы кода?
Расскажите, кто знает...
P.S. И будет ли отличие, если вызвать gotoAndPlay(1), например, в цикле onEnterFrame().
Dendroid
10.11.2006, 22:06
gotoAndPlay(1) сработает только после onEnterFrame, и после того, как будет выполнен весь код во всех объектах, связанный с данным кадром.
Посередине выполнения одного кадра кода вообще ничего внешнего не происходит.
если в начале второго кадра стоит gotoAndPlay(1) а потом весь остальной код, то он вообще не выполнится ...
Dendroid
10.11.2006, 22:12
если в начале второго кадра стоит gotoAndPlay(1) а потом весь остальной код, то он вообще не выполнится ...
Хм... Вроде работает:
gotoAndStop(2);
trace(1234);
если в начале второго кадра стоит gotoAndPlay(1) а потом весь остальной код, то он вообще не выполнится ...
KUZEN, интереснее, что будет если поставить gotoAndPlay(1) в середине, в цикле onEnterFrame().
Dendroid, из Ваших слов я понял так: gotoAndPlay(1) не выполнится до тех пор пока весь оставшийся код в onEnterFrame не отработает. Я правильно понял? :victory:
А если сразу поставить за gotoAndPlay(1) комманду exit? Надо будет мне все это в ближайшее время самому проверить, жаль Flash`a под рукой нет.
Dendroid
10.11.2006, 22:21
Как я понимаю, gotoAndPlay(1) это что-то вроде "_currentframe=1" т.е. значение просто устанавливается, код выполняется дальше (хотя можно в этом же, втором кадре протестить его, _currentframe будет равно 1), но отображаться будет только в момент перерисовки экрана), а вот уже после перерисовки новый код из первого кадра встанет в очередь на выполнение...
exit куда, из плеера совсем? ;)
Спасибо, Dendroid, за помощь!
Как я понимаю, gotoAndPlay(1) это что-то вроде "_currentframe=1" т.е. значение просто устанавливается, код выполняется дальше (хотя можно в этом же, втором кадре протестить его, _currentframe будет равно 1), но отображаться будет только в момент перерисовки экрана), а вот уже после перерисовки новый код из первого кадра встанет в очередь на выполнение...
exit куда, из плеера совсем? ;)
Нет... exit - досрочное завершение выполнения скрипта. Правда, тут тоже мне не совсем ясно. Завершается выполнение кода только из текущего кадра?
А если, как Вы и сказали, gotoAndPlay(1) это есть присвоение переменной (что то типа указателя на текущий кадр), то может комманда exit возьмет эту переменную и остановит код первого кадра...
Но спасибо за разъяснения про gotoAndPlay.
Dendroid
10.11.2006, 22:34
KUZEN, интереснее, что будет если поставить gotoAndPlay(1) в середине, в цикле onEnterFrame().
onEnterFrame не может быть циклом - это просто обработчик событий для конвеера флэша, изнутри куска кода им управлять нельзя в принципе, также как нельзя сделать паузу в выполнении одного кода, чтобы в это время что-то другое происходило.
Почему так происходит: дойдя до очередного куска кода (на фрейме, в кадре, по событию) флэш полностью отдаёт управление виртуальной машине (интерпретатору Actionscript), пока этот кусок кода не выполнился до конца - флэш ничего не делает, так как у него совсем нет процессорного времени (распараллеливания не предусмотрено). По окончании выполнения виртуальная машина опять отдаёт управление флэшу, и он уже смотрит, чего там скрипт наделал, чего поменял.
Т.е. один кусок кода - вещь неделимая с точки зрения флэша.
Ну а если exit - просто отдал управление флэшу сразу, сообщил ему, что все инструкции кончились... Да и нету во флэше никакого exit кроме return ;)...
Прервать код можно с помощью return, но вот продолжить...
Хм... Вроде работает:
gotoAndStop(2);
trace(1234);
Хм ... действительно ...
Хм ... действительно ...
return;
trace(1234);
!!!
Почему так происходит: дойдя до очередного куска кода (на фрейме, в кадре, по событию) флэш полностью отдаёт управление виртуальной машине (интерпретатору Actionscript), пока этот кусок кода не выполнился до конца - флэш ничего не делает, так как у него совсем нет процессорного времени (распараллеливания не предусмотрено). По окончании выполнения виртуальная машина опять отдаёт управление флэшу, и он уже смотрит, чего там скрипт наделал, чего поменял.
Т.е. один кусок кода - вещь неделимая с точки зрения флэша.
!!!
Во... вот это для меня очень полезная информация. Учту.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.