Форум 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)
-   -   setInterval(). есть вопросы. (http://www.flasher.ru/forum/showthread.php?t=65735)

netstuff 17.06.2005 19:31

setInterval(). есть вопросы.
 
итак. начнем из далека.
используецца setInterval() в различных частях мувика.
причем в такой форме:

Код:

var mcInterval = setInterval(function(), args);
вопрос: можно ли как-то получить все интервалы? в виде массива или ещё как? чтобы, например, всех их обнулить (удалить). разом. без сомнений и без колебаний ;)

DOG-Paul 17.06.2005 19:36

а ты их называй какнить intrval1, interval2 и т.д. и потом циклом их очисть...

artfla$her 17.06.2005 19:45

Сходу могу предложить только вариант с массивом, куда заносить все эти интервалы. Собственно, то же, что и сказал DOG-Paul.
А что, этих интервалов так много?

netstuff 17.06.2005 19:48

да неееее. как надо было сделать - эт понятно.
теперь хочецца малой кровью ошибки молодости исправить :D :D :D

думал, может как-нибудь через прототип. да вот не доезжаю никак.
будем ждать кого поумней :eek:

Король 17.06.2005 19:51

как-нибудь через прототип? это ты что имел в виду?

netstuff 17.06.2005 20:24

Цитата:

как-нибудь через прототип? это ты что имел в виду?
ну вот, например, можем же мы сделать так:

Код:

MovieClip.prototype.traceName = function() {
    trace(this._name);
}

вот и думаю, а вдруг можно обратицца к прототипу setInterval()? яч бы тогда добавил к нему функцию globalDelete() и попробовал бы как-нибудь прикрутить.

Штрек 17.06.2005 23:22

Есть такая фишка -
централизация кода....
В таком разе всё достаточно просто
/если в руте нет числовых переменных
или сделать пустой мув из которого вызывать sI.../

Код AS1/AS2:

_root.arr_id = [];
mInterval = setInterval(function () {
}, 500);
mcccccInterval = setInterval(function () {
}, 1000);
for (n in _root) {
        if (typeof _root[n] == "number") {
                _root.arr_id.push(n);
        }
}
trace(_root.arr_id);


iNils 18.06.2005 01:01

Придумал. Сыровато, и есть что еще добавить полного использования, но суть сама понятна.

Основной код:
Код AS1/AS2:

/*
        Переписываем фунцкию setInterval
*/

_global.setInterval = function () {
        if (!_global.setInterval.interval) {
                _global.setInterval.interval = new Array ();
                _global.clearIntervalAll = function () {
                        for (arg in _global.setInterval.interval) {
                                clearInterval (_global.setInterval.interval[arg]);
                        }
                };
        }
        _global.setInterval.interval[_global.setInterval.interval.length] = ASnative (250, 0).apply (_global, arguments);
};

Пример (добавить к основному коду):
Код AS1/AS2:

/*
        Создаем две фунцкии, которые будем вызвать с помощью setInterval
*/

u = function () {
        trace ("U  " + getTimer ());
};
u2 = function () {
        trace ("U2  " + getTimer ());
        if (getTimer () > 3000) {
                clearIntervalAll ();
        }
};
setInterval (u, 500);
setInterval (u2, 100);

Вызывая clearIntervalAll (), мы останавливаем все запущенные setInterval.

derhab 18.06.2005 04:00

Вот тоже вариант, заносим все интервалы в пустой массив, потом в нужный момент всё разом очищаем:

Код:

var intervals_array = [];
intervals_array.push(id2=setInterval(function () {
        trace("interval№1");
}, 30));
intervals_array.push(id=setInterval(function () {
        trace("interval№2");
}, 30));
intervals_array.push(id3=setInterval(function () {
        trace("interval№3");
}, 30));
//стираем все интервалы через 5 сек.

id_check = setInterval(function () {
        for (i=0; i<intervals_array.length; i++) {
                clearInterval(intervals_array[i]);
        }
}, 5000);


silin 19.06.2005 23:09

к идее iNils:
вроде бы ничего не мешает обойтись только счетчиком
Код:

_global.setInterval = function () {
        _global.setInterval.num+=1;
        ASnative (250, 0).apply (_global, arguments);
};

_global.clearIntervalAll=function(){
        for(var i=1;i<=setInterval.num;i++)clearInterval(i);
}



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

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