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

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

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

Регистрация: Apr 2008
Сообщений: 16
По умолчанию Задержка в цикле

Такой вопрос, как правильно использовать setInterval в цикле, и в какое время производить очистку? Необходимо, чтобы в цикле выполнялась какая-то функция и задержка перед следующим шагом. Впрочем, если это покажут с помощью SetTimeout, никаких претензий, лишь бы было видно работу задержек)

Старый 03.12.2008, 09:44
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 2  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
Код AS3:
var timer:Timer=new Timer(0);
timer.addEventListener(TimerEvent.TIMER, loopBody);
timer.delay=500;
timer.repeatCount=5;
timer.start();
 
 
function loopBody(e:TimerEvent):void {
	var i:int=Timer(e.target).currentCount;
	trace( "i : " + i );
}

Старый 03.12.2008, 15:17
fisherman вне форума Посмотреть профиль Отправить личное сообщение для fisherman Найти все сообщения от fisherman
  № 3  
Ответить с цитированием
fisherman

Регистрация: Apr 2008
Сообщений: 16
Хотелось бы тоже так хитрить, ну или скажем этак:
Код AS3:
private function Compl(evt:TimerEvent):void 
{
        timer.reset(); //что вобщем-то не обязательно	
        if(i!=30) 
	{
        //тут какая угодно функция
	i+=1;
	timer.start();				
	}
}
 
public function timeShift():void //вызов, допустим на клик
{
	timer.addEventListener(TimerEvent.TIMER_COMPLETE, Compl);
	//какая угодно функция
	timer.start();
 
}
Все это, конечно, хорошо, но хотелось бы увидеть элементарный аналог допотопного delay(), который будет работать и с for и с foreach. А эти наши с вами увертки не универсальны, и поэтому прошу еще раз, ежели вам не трудно, подумать над вопросом, или покопатся в своих программах с готовым решением оного)
Спасибо


Последний раз редактировалось fisherman; 03.12.2008 в 15:22.
Старый 03.12.2008, 15:40
ZlPredator вне форума Посмотреть профиль Отправить личное сообщение для ZlPredator Найти все сообщения от ZlPredator
  № 4  
Ответить с цитированием
ZlPredator

Регистрация: Nov 2008
Сообщений: 65
Флеш плеер работает с одним thread'ом. Поэтому, если бы можно было остановить выполнение (например, с помощью delay), то вы бы остановили полностью флеш (включая прорисовку), а не только свой код (это можно было бы обойти используя синхронизацию, но она слишком усложняет модель, поэтому в скриптах практически не используется).
Флеш построен по модели событий, вот их и используйте.

Старый 04.12.2008, 08:53
fisherman вне форума Посмотреть профиль Отправить личное сообщение для fisherman Найти все сообщения от fisherman
  № 5  
Ответить с цитированием
fisherman

Регистрация: Apr 2008
Сообщений: 16
я уже использовал слушатель, но ориентировать подобный метод на циклы for и foreach не получается, вообще говоря, я подумываю о реализации через setInterval или setTimeout, но пока что моих навыков не хватает, что бы его вовремя ставить и вовремя чистить в цикле, поэтому я и прошу помощи в данном вопросе. Теперь о delay. Да, можно много размышлять на тему о том, как работает флэш, и как это непохоже на базовые языки программирования, но задержка выполнения конкретной функции это же не новость (собственно setInterval и setTimeout именно этим и занимаются), так почему бы их не использовать в решении таких проблем? Нет, может, конечно, для вас это и не кажется сложным, но пока примеров нужного мне кодя я не нашел.

Старый 04.12.2008, 14:25
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 6  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
>> но пока примеров нужного мне кодя я не нашел

и врядли найдешь, поскольку абсолютно чуждо это флешу
реализовать то, что ты хочешь, не сложно, но реально это не имеет смысла, почему - уже объяснил ZlPredator
Код AS3:
for (var i:int = 0; i < 3; i++) {
	delay(1000);
	trace( "i : " + i+" : "+getTimer() );
}
 
function delay(val:int):void {
	var t:int=getTimer();
	while (getTimer() - t < val); 
 
}

Старый 04.12.2008, 21:46
fisherman вне форума Посмотреть профиль Отправить личное сообщение для fisherman Найти все сообщения от fisherman
  № 7  
Ответить с цитированием
fisherman

Регистрация: Apr 2008
Сообщений: 16
Так, давайте-ка проясним еще раз чего я хочу, и что мне объясняют. Т.е. задержка функции в циклах for и foreach, это по вашему "абсолютно чуждо флэшу"? Проще говоря никто так не делает? А как тогда программы пишут, я не пойму? Или вы к допотопному delay прицепились, и не поняли, что от вас человек хотел?)

Старый 04.12.2008, 21:52
_Smirnoff вне форума Посмотреть профиль Отправить личное сообщение для _Smirnoff Найти все сообщения от _Smirnoff
  № 8  
Ответить с цитированием
_Smirnoff
 
Аватар для _Smirnoff

блогер
Регистрация: Jul 2007
Адрес: Russia
Сообщений: 292
Записей в блоге: 5
"абсолютно чуждо флэшу" -Да; обновление экрана не произойдет, пока не выполнится последняя строка кода.
__________________
Оптимизация производительности на уровне кода

Старый 04.12.2008, 22:07
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 9  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
не поняли, значит..
еще раз:
можно либо приостановить выполнение цикла, застопорив весь плеер при этом, либо запустить какие-то действия с задержкой - при чем здесь тогда цикл не очень ясно, хотя можно, канеш, сделать это и в цикле..

Старый 04.12.2008, 23:16
fisherman вне форума Посмотреть профиль Отправить личное сообщение для fisherman Найти все сообщения от fisherman
  № 10  
Ответить с цитированием
fisherman

Регистрация: Apr 2008
Сообщений: 16
Если мы будем задерживать выполнение какой-то функции (используем setTimeout/setInterval) в каждом шаге цикла foreach, работа с интерфейсом во время работы цикла будет невозможной?
А если функция рисует какой-то граф. примитив, то программа нам не будет показывать прорисовку этих примитивов друг за другом с задержкой, а выдаст конечное изображение?
Судя по документации, setTimeout/setInterval для функции не должна влиять на выполнение других функций, не зависимых от неё. Все остальные функции будут выполнятся параллельно с задержкой. Так почему же должны возникнуть проблемы с интерфейсом? Мы же не стопим все)

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

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

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


 


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


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