Просмотр полной версии : Вопрос про getTimer();
Доброго времени суток!!!! Подскажите, можно ли функцию заставить выполняться например через каждые 5 сек с помощью getTimer();? Или может еще есть способ.
Волгоградец
21.01.2009, 10:29
Для этого служит setInterval().
Для этого служит setInterval()
Я пришел к выводу,что лучше getTimer().
Да можно вот так напримерvar time = getTimer();
this.onEnterFrame = function(){
if(getTimer() >= time+5000){
trace(getTimer());
time += 5000;
}
}
А если применить setIntervalsetInterval(function(){trace(getTimer())},5000);
то трэйсы getTimer(),будут точнее.И ГЛАВНОЕ удалить onEnterFrame,не в пример проще,чем накапливающийся setInterval()
Интервал тоже можно удалить.
chingachgoog
21.01.2009, 12:13
getTimer ничего не заставляет выполняться (что, судя по топику, вам и нужно). Он лишь показывает время. В коде scarbo заставляет выполняться onEnterFrame.
Но более точно будет setInterval или setTimeout.
Волгоградец
21.01.2009, 12:53
Я пришел к выводу,что лучше getTimer().
И чем же лучше? Функция должна выполняться раз в 5 секунд, а вы проверяете 30 раз в секунду подошло ли время для вызова. Лишняя трата ресурсов. К тому же onEnterFrame еще большей погрешностью обладает. И что значит накапливающийся setInterval?
DarkLight
21.01.2009, 13:20
Погрешность setInterval большая, на секундном интервале за 10 секунд может накопиться до 1 секунды ошибки. Я после каждого или нескольких тактов по getTimer проверяю отклонение и корректирую длину интервала на его компенсацию.
Большое спасибо надо попробовать!
Во DarkLight за меня уже ответил,а Вы посмотрите,по какому принципу работает setInterval(),залезть в папочку Macromedia и гляньте,тогда поймете почему getTimer() лучше.
А потом создайте 2 swf и пропишите в одном функцию с setInterval() и clearInterval(),а в другом кнопочку которая грузит 1 swf.Позагружайте не сколько раз,и увидете как удаляется setInterval()
chingachgoog
22.01.2009, 00:56
scarbo, что вы имеете ввиду об принципе работы setInterval() ?
И можете ли вы дать пример глюка clearInterval()? Такого пока не наблюдал.
И можете ли вы дать пример глюка clearInterval()?
Ха,была у меня такая проблема,и я тут её решение несколько раз спрашивал,но увы.А сейчас хотел ответить, а проблему и решил.Так что забираю свои слова про clearInterval() обратно.Но getTimer()+onEnterFrame() реально точнее,и я просто написал себе класс scarbo_interval() и им пользуюсь.Но это дело вкуса.
У getTimer() погрешность, как выяснилось, тоже будь здоров.
DarkLight
22.01.2009, 13:51
Хм, у getTimer наличествует некоторая стартовая погрешность, плюс в любой момент времени при считывании в пределах точности системного таймера (20 мс). Накопляемой погрешности у getTimer я не встречал.
Хм, у getTimer наличествует некоторая стартовая погрешность, плюс в любой момент времени при считывании в пределах точности системного таймера (20 мс). Накопляемой погрешности у getTimer я не встречал.
А мы встречали. Особенно заметно это в игре, после трех часов игры разница между двумя Date (стартовым и текущим) и значением getTimer() доходила до 25 секунд, что приводило к полной рассинхронизации.
и что же тогда предпочесть?
Свой getTimer, возвращающий разницу между стартом и текущим временем.
chingachgoog
22.01.2009, 14:53
А мы встречали. Особенно заметно это в игре, после трех часов игры разница между двумя Date (стартовым и текущим) и значением getTimer() доходила до 25 секунд, что приводило к полной рассинхронизации.
А в какую сторону была разница? getTimer() спешил или отставал от разницы, высчитанной между двумя Date?
Зависит от железа, версии плеера и операционки. Может отставать, может убегать.
Под Mac OS X разница равна нулю.
chingachgoog
22.01.2009, 15:23
Вообще - это логично. Date вытаскивается из операционной среды, а getTimer() высчитывается самим ФП (как именно - понять трудно. Одно дело - он бы только отставал - это еще можно объяснить, а вот когда еще и убегать может... Выходит, что во ФП свои автономные часы, независимые от операционной среды).
DarkLight
22.01.2009, 18:38
А мы встречали. Особенно заметно это в игре, после трех часов игры разница между двумя Date (стартовым и текущим) и значением getTimer() доходила до 25 секунд, что приводило к полной рассинхронизации.
Получаем погрешность 0,23% в общей сложности. если не сохранять предыдущий результат, а считать относительный - это пренебрежимо мало. Погрешность setInterval 3-20%. Ощутимая разница. а Date абсолютный различен, а относительный - точнее конечно, но ненамного.
...Но более точно будет setInterval или setTimeout.
Можно узнать, что за setTimeout? Ни разу не слышал.
DarkLight
22.01.2009, 19:30
Это как setInterval, только один раз. в Flash 8 была недокументированной, в CS3 уже включена в документацию.
если не сохранять предыдущий результат, а считать относительный - это пренебрежимо мало.
Работать нужно было в абсолютном времени.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.