Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 10.12.2009, 22:58
fl4sh вне форума Посмотреть профиль Отправить личное сообщение для fl4sh Найти все сообщения от fl4sh
  № 1  
Ответить с цитированием
fl4sh

Регистрация: Nov 2009
Сообщений: 2
Arrow как остановить setTimeout?

Добрый вечер!
такая проблема:
на сцене есть несколько картинок, через определенное время (с помощью setTimeout) подгружаются другие и заменяют эти..
дело в том, что если во время выполнения setTimeout (а он выполняется практически всё время в цикле) перейти на другой кадр, setTimeout продолжает выполняться

пробовал удалять саму функцию -- не помогло, clearTimeout тоже кажется не помогает, да и как к этому timeout'у обратиться, если он вызывается много раз?!

Надеюсь я понятно объяснил (:

Старый 10.12.2009, 23:09
veles2008 вне форума Посмотреть профиль Отправить личное сообщение для veles2008 Найти все сообщения от veles2008
  № 2  
Ответить с цитированием
veles2008
 
Аватар для veles2008

Регистрация: Sep 2008
Сообщений: 158
тогда остановить цикл нужно

Старый 10.12.2009, 23:36
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 3  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
У вас несколько timeout'ов, значит очищать нужно все (когда вы в цикле присваиваете id = setTimeut(...), у вас просто некой переменной возвращается очередной номер, а процесс запусается сам по себе, и если так несколько раз, то по этому номеру вы сможете очистить только последний вызванный).
См. http://www.flasher.ru/forum/showthread.php?t=133536, насколько я понимаю, к setTimeout все сказанное также относится.

Т.е. попробуйте именовать timeout'ы индивидуально, то есть присваивать номера каждый раз новой номерной переменной, а потом по этим переменным их очищайте.


Последний раз редактировалось mooncar; 10.12.2009 в 23:39.
Старый 10.12.2009, 23:52
veles2008 вне форума Посмотреть профиль Отправить личное сообщение для veles2008 Найти все сообщения от veles2008
  № 4  
Ответить с цитированием
veles2008
 
Аватар для veles2008

Регистрация: Sep 2008
Сообщений: 158
mooncar, Если здесь http://www.flasher.ru/forum/showthread.php?t=133536, setTimeout использовать вместо setInterval то бесконечного выполнения не будет

Старый 10.12.2009, 23:59
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 5  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Автор, вот что я имею ввиду. Пример:
Код AS1/AS2:
//в начале мувики невидимы
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]);
	}
};
См. Работающий пример Очистка нескольких таймаутов.rar
То есть рекомендую организовать некое хранилище, наподобие объекта indexOfTimeouts в примере, куда будете складывать номера всех вызванных таймаутов, а к обработчику события перехода на другой кадр (не знаю, что там у вас, нажатие кнопки или что, это неважно) добавить вызов цикла очистки всех таймаутов по номерам, как это сделано в конце кода.

PS. veles2008, разобрались? Да, иногда рациональнее использовать setTimeout, если нужно выполнить что-то только раз. Хотя если делать очистку правильно, то и интервалы все должны очищаться.
Вложения
Тип файла: rar Очистка нескольких таймаутов.rar (9.9 Кб, 109 просмотров)


Последний раз редактировалось mooncar; 11.12.2009 в 00:06.
Старый 11.12.2009, 00:23
fl4sh вне форума Посмотреть профиль Отправить личное сообщение для fl4sh Найти все сообщения от fl4sh
  № 6  
Ответить с цитированием
fl4sh

Регистрация: Nov 2009
Сообщений: 2
mooncar
спасибо! то что нужно

Создать новую тему Ответ Часовой пояс GMT +4, время: 12:43.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
settimeout , остановить

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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