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

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

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

Регистрация: Feb 2007
Сообщений: 3
По умолчанию sleep() возможно?

Как я понял все задержки во флэше реализовываются через setInterval с вызовом функции.

У меня, наверное руки не оттуда растут, этот сетИнтервал так и не заработал... хоть примеров насмотрелся в инете и делал почти так же.

В любом случае бывают ситуации (у меня сейчас такая) когда алгоритм будет намного лучше смотреться и удобнее писать, если задержки будут НЕ ИМИТИРОВАТЬСЯ вызовом функций и НЕ разбрасывать один единый кусок кода по десятку callback функций.

то есть, например цикл:
Код:
for (i=0; i<n; i++)
{
    // действия {}
    sleep(5); // задержка 5 сек
}

Попытался это реализовать:
Код:
//////////////////////
// Это реализация sleep-a раз и на всегда
function sleep(time)
{
	int_id = setInterval(sleep_empty_call, time);
}

function sleep_empty_call()
{
	log_field.text += "sleep_empty_call()\r"; // для отладки присобачил
	updateAfterEvent();
	clearInterval(int_id);
}
//
//////////////////////

// это пример алгоритма
for(var i=0; i<5; i++)
{
	log_field.text += i+"\r";
	sleep(5);
}
В результате в log_field сначала вываливается все 5 циклов из
Код:
log_field.text += i+"\r";
потом спутся паузу все 5 циклов
Код:
log_field.text += "sleep_empty_call()\r";

Что не так ? нужна помощь.
То есть мне бы заставить не выполняться(приостановиться) алгоритм на X времени... а с setInterval алгоритм сразу продолжает выполняться и через указанное время абсолютно независимо стартует другая "инстанция", выполняющая callback функцию.



если через getTimer() , отказавшись от setInterval, брать время и гнать цикл:
Код:
do {} while (prev_time_stamp+sleep_time > getTimer())
то плеер начинает негодавать по поводу загрузки и кидается ноутисами с предложениями прекратить выполнение


Последний раз редактировалось vg2k; 01.03.2007 в 18:23.
Старый 01.03.2007, 18:09
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 2  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
vg2k, для оформления кода есть теги [code][/code]. Оформите свой пост, как полагается.

Старый 01.03.2007, 18:12
vg2k вне форума Посмотреть профиль Отправить личное сообщение для vg2k Найти все сообщения от vg2k
  № 3  
Ответить с цитированием
vg2k

Регистрация: Feb 2007
Сообщений: 3
__etc, забыл.... поправился.

Старый 01.03.2007, 18:21
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 4  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Остановить выполнение цикла таким образом невозможно. Т.е. sleep во флеше нет. И приведенная ф-я sleep не является реализацией правильного sleep, это всего-лишь отложенное выполнение чего-либо.

Старый 01.03.2007, 19:07
vg2k вне форума Посмотреть профиль Отправить личное сообщение для vg2k Найти все сообщения от vg2k
  № 5  
Ответить с цитированием
vg2k

Регистрация: Feb 2007
Сообщений: 3
Цитата:
Остановить выполнение цикла таким образом невозможно
ТАКИМ.... а другим ? Запуск мувика-пустышки? Или... ?


Если не сложно, то попрошу продемонстрировать как в actionscript-ах будет выглядеть нижеприведенный алгоритм (написан "от болды"). Тут я при написании использовал свое понятие sleep
Может есть какие удобные оболочки для setInterval-a через которые заботиться об очистке не прейдется да и удобнее работать ?

Код:
// из хелпа генерация числа в диапазоне
function randRange(min:Number, max:Number):Number {
    var randomNum:Number = Math.floor(Math.random() * (max - min + 1)) + min;
    return randomNum;
}

function some_func()
{
	sleep(randRange(1,3));
	// действия
	somevar = randRange(1,2);
	switch(somevar)
	{
		case 1:
			// действия
		break;
		
		case 2:
			// действия
			sleep(randRange(2,4));
		break;
	}
}

for (i=0; i<100; i++)
{
	// действия
	sleep(randRange(3,6));
	if (i==5 || i==20 || i==34)
		some_func(i);
	// действия
	sleep(randRange(5,9));
}

Старый 01.03.2007, 19:12
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 6  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Можно вообще прервать выполнение цикла соответствующими операторами. Возобновить его уже не получится.

А что было продемонстрировано, я не понял.
Под sleep я понял аналог подобной функции, например, в паскале, php. Т.е. остановка выполнения программы на заданный интервал.

Старый 01.03.2007, 19:17
CorC вне форума Посмотреть профиль Отправить личное сообщение для CorC Найти все сообщения от CorC
  № 7  
Ответить с цитированием
CorC
 
Аватар для CorC

Регистрация: Jul 2006
Адрес: Земля>Россия>Вологда
Сообщений: 3,056
Отправить сообщение для CorC с помощью ICQ Отправить сообщение для CorC с помощью MSN Отправить сообщение для CorC с помощью Skype™
выполнение кода нельзя прервать
а потом продолжить
можно лишь вызвать функцию через
определенное кол-во миллисекунд
по этому поводу уже писалось
многократно, и в поиске отражено
__________________
"We Are The Champions My Friends!" Queen

Старый 02.03.2007, 13:31
Cruser вне форума Посмотреть профиль Отправить личное сообщение для Cruser Найти все сообщения от Cruser
  № 8  
Ответить с цитированием
Cruser

Регистрация: Feb 2007
Сообщений: 7
Код:
function sleep(ms:Number)
{
  var t:Number = getTimer();
  while((getTimer() - t) < ms);
}

Старый 02.03.2007, 13:57
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 9  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Угу, при этом всё подвиснет наглухо, а по истечении 15 сек будет вывалено сообщение о бесконечном цикле.

Старый 02.03.2007, 20:37
this.create вне форума Посмотреть профиль Отправить личное сообщение для this.create Найти все сообщения от this.create
  № 10  
Ответить с цитированием
this.create

Регистрация: Feb 2007
Сообщений: 264
Цитата:
Сообщение от vg2k
Код:
for (i=0; i<n; i++)
{
    // действия {}
    sleep(5); // задержка 5 сек
}
Код:
var n:Number = 0;
var all:Number = 10;
var someInt:Number;
//
function someAction():Void {
    if (n<all) {
        trace('someAction '+n);
        n++;
    } else {
        clearInterval(someInt);
    }
}
//
someInt = setInterval(someAction, 5000);

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

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

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


 


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


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