PDA

Просмотр полной версии : Неработает Loop в MX


IUnknown
08.11.2003, 16:05
Привеь. У меня есть три именованных фрейма:

# Фрейм start
var nRand = random(20) + 10;
gotoAndPlay('repeate');

# Фрейм repeate
trace(nRand);

if (nRand == 0){
gotoAndStop('finish');
} else {
nRand--;
gotoAndPlay('repeate');
}

# Фрейм finish
stop;

По идее должно быть так: в первом фрейме получаем число. идем на второй фрейм. там число уменьшаем до нуля, с каждым разом фрейм переходит сам на себя, и потом переходим на третий. Но у меня получается так, что при выполнении функции gotoAndPlay('repeate'); происходит переход на третий фрейм finish, там игнорируется функция stop; и происходит переход на первый фрейм. Почему???????
Ведь все правильно. Сначала у меня небыли именованные фреймы, но что бы быть уверенным я дал им имена и изменил код. Но все равно не работает.

спасибо.

IUnknown
08.11.2003, 16:07
я приаттачил исходник.

opex
08.11.2003, 16:47
можед быть так

IUnknown
08.11.2003, 17:03
Дык в файле ни каких изменений, все так же, как и было. я чего то непонимаю?


Ага. там появился еще один фрейм на слое Rect. только зачем? и как это влияет на выполнение срипта. Я снова попробовал запустить дебаг и после выполнения функции gotoAndPlay('repeate') скрипт переходит на слой финиш, а не на слой репиат. Я хочу, что бы квадратик пропадал со временем. Этого не добиться если там есть символ на последнем фрейме.

major
08.11.2003, 18:12
goto... на самого себя не выполняется в принципе. Т.е. если goto... на тот же фрейм, где головка плеера уже находится, то команда игнорируется.

sergwizard
08.11.2003, 18:25
Фрейм не может переходить сам на себя. У тебя получается так: плэйер считывает с первого фрейма значение nRand и переходит на второй фрейм. Во втором фрейме он трэйсит значение nRand и, если оно не равно 0 (а это значение не может быть равно 0 по определению), уменьшает значение nRand на единицу и выполняет директиву gotoAndPlay(“repeate”). Это значит, что плэйер не задерживается на этом фрейме, а ИГРАЕТ дальше. Фактически, он переходит на третий фрейм, не считывая кода (“stop”) на нем. Но чисто визуально мы можем определить такой переход. С третьего фрейма опять происходит переход на первый фрейм. Считывается новое значение nRand и все повторяется бесконечно.
Чтобы все получилось, как ты хочешь, тебе надо сделать еще один дополнительный фрейм. Смотри аттачмент.
А вообще-то, надо учиться делать все без фремов. Циклы ведь можно писать и в одном фрейме, применяя movieClip.onEnterFrame. Как это делать, показано во втором примере.

IUnknown
08.11.2003, 18:27
я до этого уже дошел 15 мин назад. Решил это тем, что сделал еше один пустой фрейм между первым и вторым. и теперь при декременте числа иду на второй фрейм, а он потом переходит на третий, где вся операция повторяется снова. Разве в флешь 5 такая фича была? Кажется нет, иначе как же работают все эти прелоадеры? В общем работает, всем спасибо.