![]() |
|
||||||||||
|
|||||
|
Регистрация: Aug 2009
Сообщений: 12
|
Следующий код работаетб но время отстает примерно на 1с/в мин:
var now:Date = new Date(); var oneSec:uint = 1000; var oneSecT:Timer = new Timer(oneSec,0); clk_field.appendText(now.hours+':'+now.minutes+':'+now.seconds); oneSecT.addEventListener(TimerEvent.TIMER, onTick); oneSecT.start(); function onTick(event:TimerEvent):void{ now.setTime(now.getTime()+oneSec); clk_field.replaceText(0,8,String(now.hours+':'+now.minutes+':'+now.seconds)); } Последний раз редактировалось Sprynk; 26.08.2009 в 14:40. |
|
|||||
|
Регистрация: Oct 2006
Адрес: Москва
Сообщений: 889
|
первое: оформите код иначе разговаривать не будут
второе: во флеше таймер имеет такое свойство врать и очень зависим от производительности компьютера |
|
|||||
|
Регистрация: Aug 2009
Сообщений: 17
|
могу посоветовать использовать Event.ENTER_FRAME и скипать лишние кадры.
т.е. например флеха рааботает 24 кадра в секунду. Нужно создать переменную, которая будет увеличиваться на 1 каждый раз. И когда переменная равна 24, т.е. 1 кадр в секнду, выполняем нужный код. и обнуляем переменную, которая считает кадры. Аналогичным образом можно сделать выполнение кода не раз в секнуд, а расчитать на любое время. |
|
|||||
|
strange mood
|
Таймер врёт, с этим придётся смириться.
Чтобы ошибка не накапливалась, при запуске таймера нужно запомнить текущее время, и при срабатываии таймера вычислять, сколько времени реально прошло.
__________________
тонкий тролль, осеянный благодатью |
|
|||||
|
Регистрация: Jan 2009
Сообщений: 1,651
|
2kolypaev:
enterFrame еще более неточный, чем Timer и getTime. отречься от таймера надобно и обратиться к силе new Date(). |
|
|||||
|
Регистрация: Feb 2007
Сообщений: 63
|
а если юзер ручками переведет дату между двумя new Date().time?
ps: а как с точностью у flash.utils.getTimer() ? Последний раз редактировалось ToRR; 26.08.2009 в 16:09. |
|
|||||
|
Регистрация: Aug 2009
Сообщений: 12
|
Спасибо за советы. У меня получилась след. версия:
var oneSecT:Timer = new Timer(1000); oneSecT.addEventListener(TimerEvent.TIMER, onTick); oneSecT.start(); function onTick(event:TimerEvent):void{ var now = new Date(); clk_field.replaceText(0,8,String(now.hours+':'+now.minutes+':'+now.seconds)); } ![]() А можно ли вытащить системное время без конструктора? И нужно ли удалять экземпляр now? Не засораю ли я память все новыми и новыми экземплярами? Последний раз редактировалось Sprynk; 26.08.2009 в 16:52. |
|
|||||
|
strange mood
|
Всё нормально
![]() Экземпляр now объявляется как локальная переменная, ссылка на которую теряется после выхода из функции, поэтому мусорщик спокойно соберёт его.
__________________
тонкий тролль, осеянный благодатью |
|
|||||
|
Регистрация: Jan 2009
Сообщений: 1,651
|
я б вообще не на таймер это вешал, а на enterFrame.
|
|
|||||
|
Регистрация: Aug 2009
Сообщений: 12
|
Выяснил главное - таймеру верить нельзя.
Собственно, тема закрыта. |
![]() |
![]() |
Часовой пояс GMT +4, время: 00:19. |
|
|
« Предыдущая тема | Следующая тема » |
|
|