PDA

Просмотр полной версии : Вопрос про getTimer();


CaHTeX
21.01.2009, 08:49
Доброго времени суток!!!! Подскажите, можно ли функцию заставить выполняться например через каждые 5 сек с помощью getTimer();? Или может еще есть способ.

Волгоградец
21.01.2009, 10:29
Для этого служит setInterval().

scarbo
21.01.2009, 11:05
Для этого служит setInterval()
Я пришел к выводу,что лучше getTimer().
Да можно вот так напримерvar time = getTimer();
this.onEnterFrame = function(){
if(getTimer() >= time+5000){
trace(getTimer());
time += 5000;
}
}
А если применить setIntervalsetInterval(function(){trace(getTimer())},5000);
то трэйсы getTimer(),будут точнее.И ГЛАВНОЕ удалить onEnterFrame,не в пример проще,чем накапливающийся setInterval()

DaFive
21.01.2009, 11:45
Интервал тоже можно удалить.

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 проверяю отклонение и корректирую длину интервала на его компенсацию.

CaHTeX
21.01.2009, 18:20
Большое спасибо надо попробовать!

scarbo
21.01.2009, 18:54
Во DarkLight за меня уже ответил,а Вы посмотрите,по какому принципу работает setInterval(),залезть в папочку Macromedia и гляньте,тогда поймете почему getTimer() лучше.
А потом создайте 2 swf и пропишите в одном функцию с setInterval() и clearInterval(),а в другом кнопочку которая грузит 1 swf.Позагружайте не сколько раз,и увидете как удаляется setInterval()

chingachgoog
22.01.2009, 00:56
scarbo, что вы имеете ввиду об принципе работы setInterval() ?
И можете ли вы дать пример глюка clearInterval()? Такого пока не наблюдал.

scarbo
22.01.2009, 02:28
И можете ли вы дать пример глюка clearInterval()?
Ха,была у меня такая проблема,и я тут её решение несколько раз спрашивал,но увы.А сейчас хотел ответить, а проблему и решил.Так что забираю свои слова про clearInterval() обратно.Но getTimer()+onEnterFrame() реально точнее,и я просто написал себе класс scarbo_interval() и им пользуюсь.Но это дело вкуса.

etc
22.01.2009, 12:52
У getTimer() погрешность, как выяснилось, тоже будь здоров.

DarkLight
22.01.2009, 13:51
Хм, у getTimer наличествует некоторая стартовая погрешность, плюс в любой момент времени при считывании в пределах точности системного таймера (20 мс). Накопляемой погрешности у getTimer я не встречал.

etc
22.01.2009, 14:00
Хм, у getTimer наличествует некоторая стартовая погрешность, плюс в любой момент времени при считывании в пределах точности системного таймера (20 мс). Накопляемой погрешности у getTimer я не встречал.
А мы встречали. Особенно заметно это в игре, после трех часов игры разница между двумя Date (стартовым и текущим) и значением getTimer() доходила до 25 секунд, что приводило к полной рассинхронизации.

scarbo
22.01.2009, 14:11
и что же тогда предпочесть?

etc
22.01.2009, 14:14
Свой getTimer, возвращающий разницу между стартом и текущим временем.

chingachgoog
22.01.2009, 14:53
А мы встречали. Особенно заметно это в игре, после трех часов игры разница между двумя Date (стартовым и текущим) и значением getTimer() доходила до 25 секунд, что приводило к полной рассинхронизации.

А в какую сторону была разница? getTimer() спешил или отставал от разницы, высчитанной между двумя Date?

etc
22.01.2009, 15:06
Зависит от железа, версии плеера и операционки. Может отставать, может убегать.
Под 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 абсолютный различен, а относительный - точнее конечно, но ненамного.

ENDrain
22.01.2009, 18:52
...Но более точно будет setInterval или setTimeout.

Можно узнать, что за setTimeout? Ни разу не слышал.

DarkLight
22.01.2009, 19:30
Это как setInterval, только один раз. в Flash 8 была недокументированной, в CS3 уже включена в документацию.

etc
22.01.2009, 20:59
если не сохранять предыдущий результат, а считать относительный - это пренебрежимо мало.
Работать нужно было в абсолютном времени.