Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   удаление SetInterval (http://www.flasher.ru/forum/showthread.php?t=148153)

gnom4 22.12.2010 20:08

удаление SetInterval
 
Здравствуйте, помогите решить такую проблему:

Код AS3:

var interval;
 
ff();
ff();
 
function ff():void
{
        interval = setInterval(fun, 1000);
}
 
function fun():void
{
        clearInterval(interval);
}

Если один раз вызывать функцию ff() то функция fun() вызывается один раз, а если ff() вызвать несколько раз, то оно зацикливается. Как сделать, так, что бы она выполнялась столько раз сколько её вызывали?

КорДум 22.12.2010 20:16

Код AS3:

ff();
ff();

Выполнится два раза.
Код AS3:

ff();
ff();
ff();
ff();

Выполнится четыре раза. Что вы хотите-то? Сделать, чтобы что-то выполнялось раз в секунду? Timer.

gnom4 22.12.2010 20:22

Проблема в том, что функция ff(); запускается несколько раз по определенному событию. Надо чтоб через секунду запустилась ф-ция fun() столько раз сколько мы ее вызвали, в примере - два. Но если протестить код, то она зацикливается и бесконечно заходит в ф-цию fun(), то есть clearInterval в ф-ции fun() не срабатывает. В этом вопрос. Как удалять интервал каждый раз?

alatar 22.12.2010 20:32

Ну так у вас же ссылка указывает на идентификатор нового интервала, а старый вы не остановили. Вот он и работает.
Код AS3:

var intervals:Array = [];
 
ff();
ff();
 
function ff():void
{
        intervals.push(setInterval(fun, 1000));
}
 
function fun():void
{
    if (intervals.length)
    {
        clearInterval(intervals.shift());
    {
}


КорДум 22.12.2010 20:34

А таймером проще ;)

alatar 22.12.2010 20:36

Я и не возражаю. Ни разу не использовал в as3 setInterval. Но с таймером можно так же накосячить, если пытаться остановить не target, а ссылку.

gnom4 22.12.2010 20:43

Спасибо, заработало!)

КорДум 22.12.2010 20:44

Цитата:

если пытаться остановить не target, а ссылку
Эм, вот этого не понял. Можно пример?
Код AS3:

private var timer:Timer = new Timer(1000); //ссылка
...
timer.stop(); // останавливаю по ссылке


Psycho Tiger 22.12.2010 20:45

setTimeout, если очень хочется)

alatar 23.12.2010 11:39

Цитата:

Эм, вот этого не понял. Можно пример?
Один в один как у топикстартера, но с таймером. Обычные ошибки начинающих, как правило, они не следят за ссылками.
Код AS3:

var timer;
 
ff();
ff();
 
function ff():void
{
        timer = new Timer(1000); //создается таймер
}
 
function fun():void
{
        timer.stop(); //вот здесь будет косяк
}



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

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