PDA

Просмотр полной версии : можно ли остановить рекурсию?


smailik
16.06.2010, 15:56
Есть такой код
function randomMenu() {
var BrighTwo2:Tween = new Tween(thisClip2.rec, "_alpha", Strong.easeIn, 70, 0, 1, true);
rnd = Math.ceil(Math.random()*11);
trace(rnd);
thisClip = this["m"+rnd];//первый квадратик
rnd2 = rnd+Math.ceil(Math.random()*10);
if (rnd2>11) {
rnd2 = rnd2-11;
}
trace(rnd2);
thisClip2 = this["m"+rnd2];//второй квадратик
var Brigh:Tween = new Tween(thisClip.rec, "_alpha", Regular.easeOut, 0, 70, 1, true);
Brigh.onMotionFinished = function() {
var BrighTwo:Tween = new Tween(thisClip2.rec, "_alpha", Regular.easeOut, 0, 70, 1, true);
var Brigh2:Tween = new Tween(thisClip.rec, "_alpha", Strong.easeIn, 70, 0, 1, true);
Brigh2.onMotionFinished = function() {
randomMenu();//вызывает сама себя, для повтора
};
};
}
randomMenu();
Можно ли как нибудь остановить выполнение данной функции, скажем по нажатию кнопки?

mooncar
16.06.2010, 16:20
Ну введи флаг какой-нибудь для проверки:

.......
Brigh2.onMotionFinished = function() {
if (!stopIt) {
randomMenu();//вызывает сама себя, для повтора
}
};
.......
btn.onRelease = function () {
stopIt = true ;
};

smailik
16.06.2010, 16:30
флаг это понятно, а именно командой можно?
каким-нибудь брейком?

mooncar
16.06.2010, 16:36
флаг это понятно, а именно командой можно?
каким-нибудь брейком?

Пожалуйста.
Какая разница, как.
Главное, чтобы переменная-флаг stopIt получила значение true.
Тогда в моем примере при очередной проверке рекурсивный вызов не произойдет.

Либо счетчик поставь на количество итераций, если нужно получить их конечное количество.

Хемуль
16.06.2010, 16:38
2 smailik:
Рекурсию не просто можно, а нужно останавливать, ибо просто измерите глубину стека. ^_^
Вот вы вызываете внутри тела функции её же саму. Что вам мешает ввести проверку и делать такой вызов только при выполнении определённого условия? Как только условие перестанет выполняться, вызов не совершится и рекурсия прервётся.

rainbowrussia
16.06.2010, 17:09
флаг это понятно, а именно командой можно?
каким-нибудь брейком?


return;
?