Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Вопрос про getTimer(); (http://www.flasher.ru/forum/showthread.php?t=120453)

CaHTeX 21.01.2009 08:49

Вопрос про getTimer();
 
Доброго времени суток!!!! Подскажите, можно ли функцию заставить выполняться например через каждые 5 сек с помощью
Код AS1/AS2:

getTimer();

? Или может еще есть способ.

Волгоградец 21.01.2009 10:29

Для этого служит setInterval().

scarbo 21.01.2009 11:05

Цитата:

Для этого служит setInterval()
Я пришел к выводу,что лучше getTimer().
Да можно вот так например
Код AS1/AS2:

var time = getTimer();
this.onEnterFrame = function(){
        if(getTimer() >= time+5000){
                trace(getTimer());
                time += 5000;
        }
}

А если применить setInterval
Код AS1/AS2:

setInterval(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

Цитата:

Сообщение от scarbo (Сообщение 792499)
Я пришел к выводу,что лучше 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

Цитата:

Сообщение от DarkLight (Сообщение 792816)
Хм, у 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

Цитата:

Сообщение от __etc (Сообщение 792819)
А мы встречали. Особенно заметно это в игре, после трех часов игры разница между двумя 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

Цитата:

Сообщение от chingachgoog (Сообщение 792524)
...Но более точно будет setInterval или setTimeout.

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

DarkLight 22.01.2009 19:30

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

etc 22.01.2009 20:59

Цитата:

Сообщение от DarkLight (Сообщение 792895)
если не сохранять предыдущий результат, а считать относительный - это пренебрежимо мало.

Работать нужно было в абсолютном времени.


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

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