PDA

Просмотр полной версии : Какая есть альтернатива setTimeout в AS2.0?


EndoCrinologist
15.10.2011, 22:17
Просто я использовал по поиску на данном форуме
setTimeout(someFunction,1000);
у меня данная функция не сработала

crazyone
15.10.2011, 23:22
Покажите код.

EndoCrinologist
15.10.2011, 23:30
function checkCounter(){
checkCounter1();
setTimeout(checkCounter2,1000);
checkCounter2();
}

crazyone
16.10.2011, 00:32
А, точно. В AS2 нет setTimeout. Есть только setInterval.
Гугл выдал такую реализацию, дополнить нечего:
function setTimeout(f:Function, t:Number):Void
{
var args:Array = arguments.slice(2);
var id:Number;
var func:Function = function()
{
f.apply(null, args);
clearInterval(id);
}
id = setInterval(func, t, args);
}

EndoCrinologist
16.10.2011, 00:35
а как её затем использовать здесь?

function checkCounter(){
checkCounter1();
setTimeout(checkCounter2,1000);
checkCounter2();
}

etc
16.10.2011, 00:36
_global.setTimeout

EndoCrinologist
16.10.2011, 00:46
Пожалуйста, если можно, на моём примере. Задержать исполнение checkCounter2

etc
16.10.2011, 00:50
Не вызывайте checkCounter2 следующей строкой после setTimeout.

EndoCrinologist
16.10.2011, 00:53
Сначала исполняется checkCounter1, затем происходят операции с полученными данными. Задержка. Затем выполняется checkCounter2, и еще раз операции. Как это отобразить?

mooncar
16.10.2011, 00:53
А, точно. В AS2 нет setTimeout. Есть только setInterval.

Да как нет?
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/2/help.html?content=00000602.html

EndoCrinologist
16.10.2011, 00:56
Тогда как отобразить
Сначала исполняется checkCounter1, затем происходят операции с полученными данными. Задержка. Затем выполняется checkCounter2, и еще раз операции. Как это отобразить?

mooncar
16.10.2011, 00:56
Сначала исполняется checkCounter1, затем происходят операции с полученными данными. Задержка. Затем выполняется checkCounter2, и еще раз операции. Как это отобразить?
Постройте правильно событийную модель.
"затем происходят операции с полученными данными." - как данные готовы (обработчик-то события готовности там есть?), вызывайте
var to:Number = setTimeout(checkCounter2, 1000);

crazyone
16.10.2011, 00:59
Эх, время, куда ты бежишь...
Ну да, с восьмого флеш-плеера появилось, но появилось как в то время было принято - косовато и кривовато. И если писать код в классах, нужно было вызывать через _global.setTimeout

EndoCrinologist
16.10.2011, 12:27
Всё равно что-то не выходит.. Покажу полностью код. Если будет упрощенная альтернатива, то направьте на нужный путь.

//Функция проверки изменения количества
function checkMsg(){
if (msg2 != msg1){
txt = "Количество изменено";
chat.text = "Считаны сообщения";
readingMsgs();
}
}

//Если изменится количество - вывести это сообщение
function readingMsgs(){
chat.htmlText += "Количество изменилось";
}

//Первая проверка
function checkCounter1(){
//Проверка счетчика сообщений, при изменении которого происходит считывание сообщений.
txt = "Проверка 1";
_urls = "msg.txt";
var lv:LoadVars = new LoadVars()
lv.onLoad = lvOnLoad;
lv.load(_urls);
function lvOnLoad (suc:Boolean) {
if(suc){
msg1 = this.msg;
}
}
}
checkCounter1(); //Выполнение первой проверки
checkMsg(); //Проверка отличности msg1 от msg2
setTimeout(checkCounter2, 1000); //ВОТ ТУТ И НУЖНА ЗАДЕРЖКА, чтобы функция checkMsg успела проверить, а не изменилось ли количество сообщений
//Вторая проверка
function checkCounter2(){
txt = "Проверка 2";
//Проверка счетчика сообщений, при изменении которого происходит считывание сообщений.
_urls = "msg.txt";
var lv:LoadVars = new LoadVars()
lv.onLoad = lvOnLoad;
lv.load(_urls);
function lvOnLoad (suc:Boolean) {
if(suc){
msg2 = this.msg;
}
}
}
checkCounter1(); //Выполнение второй проверки
checkMsg(); //Проверка отличности msg1 от msg2


К чему все эти заморочки, спросите вы, а я отвечу так: сайт располагается на бесплатном хостинге с ограничением трафика 100Мб/час. Поэтому, проверяя ТОЛЬКО количество сообщений, я сэкономлю кучу трафика, а не каждый раз считывая тексты чата. Вот такие вот дела.

Добавлено через 3 минуты

обработчик-то события готовности там есть?


функции выложил. Готовность - это означает, что данные считались из файла

mooncar
16.10.2011, 12:50
Не изучая досконально ваш код, сразу отмечу:
1. Не определяйте функции в функциях.
2. "Готовность - это означает, что данные считались из файла" - вот в обработчике, который и показывает готовность (lvOnLoad) и нужно стартовать дальнейшие действия.

А так у вас выполнятся одновременно:

Два раза checkCounter1()
Два раза checkMsg()
И через 1 сек выполнится checkCounter2()

Потом начнут срабатывать обработчики загрузки.
Разве вам так надо?
Еще раз скажу - постройте правильно событийную модель.
Вызывайте очередное действие в правильный момент. Если у вас вызов одна функции записан под другой - это не обязательно значит, что все, что в ней записано, выполнится тоже после того, что было записано в первой. AS2 работает асинхронно по отношению к событиям, например, получения данных. Для того обработчики событий и нужны.