![]() |
|
||||||||||
|
|||||
|
Регистрация: Nov 2009
Сообщений: 2
|
Добрый вечер!
такая проблема: на сцене есть несколько картинок, через определенное время (с помощью setTimeout) подгружаются другие и заменяют эти.. дело в том, что если во время выполнения setTimeout (а он выполняется практически всё время в цикле) перейти на другой кадр, setTimeout продолжает выполняться ![]() пробовал удалять саму функцию -- не помогло, clearTimeout тоже кажется не помогает, да и как к этому timeout'у обратиться, если он вызывается много раз?! Надеюсь я понятно объяснил (: |
|
|||||
|
Регистрация: Sep 2008
Сообщений: 158
|
тогда остановить цикл нужно
|
|
|||||
|
Модрон-ветеринар
|
У вас несколько timeout'ов, значит очищать нужно все (когда вы в цикле присваиваете id = setTimeut(...), у вас просто некой переменной возвращается очередной номер, а процесс запусается сам по себе, и если так несколько раз, то по этому номеру вы сможете очистить только последний вызванный).
См. http://www.flasher.ru/forum/showthread.php?t=133536, насколько я понимаю, к setTimeout все сказанное также относится. Т.е. попробуйте именовать timeout'ы индивидуально, то есть присваивать номера каждый раз новой номерной переменной, а потом по этим переменным их очищайте. Последний раз редактировалось mooncar; 10.12.2009 в 23:39. |
|
|||||
|
Регистрация: Sep 2008
Сообщений: 158
|
mooncar, Если здесь http://www.flasher.ru/forum/showthread.php?t=133536, setTimeout использовать вместо setInterval то бесконечного выполнения не будет
|
|
|||||
|
Модрон-ветеринар
|
Автор, вот что я имею ввиду. Пример:
//в начале мувики невидимы for (i = 1; i <= 10; i++) { _root['mc' + i]._visible = false ; } //создаем объект-хранилище для переменных, которые будут содержать номера таймаутов var indexOfTimeouts:Object = new Object(); //стартует показ мувиков с все возрастающей задержкой startShow.onRelease = function () { for (i = 1; i <= 10; i++) { indexOfTimeouts[i] = setTimeout(showMc, i * 500, i); //передаем в функцию аргументом номер i } } //сама функция показа function showMc (num:MovieClip) { _root['mc' + num]._visible = true ; } //очищает все таймауты, беря номера из переменных, которые содержатся в специальном объекте sopShow.onRelease = function () { for (i in indexOfTimeouts) { clearTimeout(indexOfTimeouts[i]); } }; То есть рекомендую организовать некое хранилище, наподобие объекта indexOfTimeouts в примере, куда будете складывать номера всех вызванных таймаутов, а к обработчику события перехода на другой кадр (не знаю, что там у вас, нажатие кнопки или что, это неважно) добавить вызов цикла очистки всех таймаутов по номерам, как это сделано в конце кода. PS. veles2008, разобрались? Да, иногда рациональнее использовать setTimeout, если нужно выполнить что-то только раз. Хотя если делать очистку правильно, то и интервалы все должны очищаться. Последний раз редактировалось mooncar; 11.12.2009 в 00:06. |
|
|||||
|
Регистрация: Nov 2009
Сообщений: 2
|
mooncar
спасибо! то что нужно |
![]() |
![]() |
Часовой пояс GMT +4, время: 12:43. |
|
|
« Предыдущая тема | Следующая тема » |
| Теги |
| settimeout , остановить |
|
|