![]() |
Простые часы отстают. Причина?
Следующий код работаетб но время отстает примерно на 1с/в мин:
Код AS3:
|
первое: оформите код иначе разговаривать не будут
второе: во флеше таймер имеет такое свойство врать и очень зависим от производительности компьютера |
могу посоветовать использовать Event.ENTER_FRAME и скипать лишние кадры.
т.е. например флеха рааботает 24 кадра в секунду. Нужно создать переменную, которая будет увеличиваться на 1 каждый раз. И когда переменная равна 24, т.е. 1 кадр в секнду, выполняем нужный код. и обнуляем переменную, которая считает кадры. Аналогичным образом можно сделать выполнение кода не раз в секнуд, а расчитать на любое время. |
Таймер врёт, с этим придётся смириться.
Чтобы ошибка не накапливалась, при запуске таймера нужно запомнить текущее время, и при срабатываии таймера вычислять, сколько времени реально прошло. |
2kolypaev:
enterFrame еще более неточный, чем Timer и getTime. отречься от таймера надобно и обратиться к силе new Date(). |
а если юзер ручками переведет дату между двумя new Date().time?
ps: а как с точностью у flash.utils.getTimer() ? |
Спасибо за советы. У меня получилась след. версия:
Код AS3:
А можно ли вытащить системное время без конструктора? И нужно ли удалять экземпляр now? Не засораю ли я память все новыми и новыми экземплярами? |
Всё нормально :)
Экземпляр now объявляется как локальная переменная, ссылка на которую теряется после выхода из функции, поэтому мусорщик спокойно соберёт его. |
я б вообще не на таймер это вешал, а на enterFrame.
|
Выяснил главное - таймеру верить нельзя.
Собственно, тема закрыта. |
| Часовой пояс GMT +4, время: 07:54. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.