Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Интервал таймера зависит от fps (http://www.flasher.ru/forum/showthread.php?t=140181)

i.o. 22.05.2010 21:06

getTimer() точнее, чем Date.time

Psycho Tiger 22.05.2010 21:29

Разве он намного точнее, чем Timer?

iNils 22.05.2010 22:04

Цитата:

Сообщение от Psycho Tiger (Сообщение 910215)
Разве он намного точнее, чем Timer?

Летело две вороны, одна черная, другая налево.
getTimer показывает время с момента запуска флешки, а Timer вызывает события с заданным интервалом, и вот эти вызовы неточные.

Psycho Tiger 22.05.2010 22:32

Вызывая getTimer я не считаю, что он мне покажет точное время с момента запуска флешки, будет погрешность + - сколько-то. Выравниваясь по getTimer мы всё равно накопим погрешность, которая, по моему мнению, ни на чем не основанном, будет примерно таким же, как при вызовах хендлеров от Timer.

i.o., а почему получая системное время мы получаем его менее точным, чем getTimer?

iNils 22.05.2010 23:28

Цитата:

Вызывая getTimer я не считаю, что он мне покажет точное время с момента запуска флешки, будет погрешность + - сколько-то.
Откуда такие мысли?

Psycho Tiger 23.05.2010 00:12

Цитата:

Сообщение от iNils (Сообщение 910237)
Откуда такие мысли?

Методом от противного. Если можно точно определить текущее время со старта флешки, то, наверное, можно и достаточно точно запускать любого рода таймауты. getTimer() + delay. Короче, если в любой момент времени можно получить реальное время после запуски флешки, то я не вижу реальных преград для создания сверхточных таймеров и всякой такой бурды.

Другое дело, если адоубовцы пошли для таймеров каким то другим путём, например, для производительности, но эти факты мне уже неизвестны. Но как то всё это... не могу знать, что они там мудрят.

Поэтому я исхожу из того, что предыдущая предпосылка неверна, а значит и у getTimer`а есть погрешности.

Кстати, я бы слепо верил в то, что getTimer это банальная субстракция текущего системного времени - время старта флешки, однако
Цитата:

getTimer() точнее, чем Date.time
Короче говоря, у меня одни догадки. iNils, ты уверен что getTimer очень точный - насколько вообще можно быть точным в фп?

iNils 23.05.2010 00:27

getTimer работает просто: При старте флешки, берется системное время. При вызове getTimer берется еще одно время, разница и есть время работы. То есть время берется в момент вызова getTimer. Откуда тут погрешность?
А интервалы срабатывают в "окне" между выполнением кода.
Допустим есть такой код
Код AS3:

private function init (event:Event):void {
        var t:Timer = new Timer (10, 20);
        t.addEventListener (TimerEvent.TIMER, onT);
        t.start ();
        trace ();
        a ()
        trace ();
}
 
private function a ():void {
        for (var i:int = 0; i < 1000000; i++) {
                var t:int = getTimer ();
        }
}
private function onT (event:TimerEvent):void {
        trace ("timer");
}

Пусть он выполняется 100 миллисекунд. И в течении всех миллионов раз запуска, getTimer будет меняться. Вопрос: ты реально думаешь, что таймер вызовет обработчик события 10 раз пока выполняется метод "а", то есть в середине выполнения метода или же дождется его окончание, тем самым сдвинув вызов первого интервала на 100 мс?

Psycho Tiger 23.05.2010 00:51

Черт. У нас же один поток... Да, ты прав.
Но мне все ещё неясны слова i.o. -
Цитата:

getTimer() точнее, чем Date.time

Obi 23.05.2010 01:11

Простите что вклиниваюсь, на правах вечера субботы: а что вам мешает использовать Date.getTime()? По-моему точнее не придумать.

medvedya2 23.05.2010 02:39

Цитата:

Сообщение от enepx (Сообщение 910169)
Таймер не зависит от скорости компьютера и/или его загруженности. Только прорисовка.

Провёл тесты, если много прорисовки то таймер начинает тормозить, как будто прорисовка и таймер находятся в одном потоке, то есть выполняется таймер и следующий шаг таймера не может выполнится пока не пройдет прорисовка кадра.
видимо разработчикам флеша было впадлу реализовать таймер отдельно и они его на самом AS3 и написали за основу взяли ENTER_FRAME.


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

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