Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   можно ли остановить рекурсию? (http://www.flasher.ru/forum/showthread.php?t=141114)

smailik 16.06.2010 15:56

можно ли остановить рекурсию?
 
Есть такой код
Код AS1/AS2:

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

Ну введи флаг какой-нибудь для проверки:
Код AS1/AS2:

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


smailik 16.06.2010 16:30

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

mooncar 16.06.2010 16:36

Цитата:

Сообщение от smailik (Сообщение 915950)
флаг это понятно, а именно командой можно?
каким-нибудь брейком?

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

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

Хемуль 16.06.2010 16:38

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

rainbowrussia 16.06.2010 17:09

Цитата:

Сообщение от smailik (Сообщение 915950)
флаг это понятно, а именно командой можно?
каким-нибудь брейком?


Код:

return;
?


Часовой пояс GMT +4, время: 11:34.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.