Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 26.08.2009, 14:32
Sprynk вне форума Посмотреть профиль Отправить личное сообщение для Sprynk Найти все сообщения от Sprynk
  № 1  
Ответить с цитированием
Sprynk

Регистрация: Aug 2009
Сообщений: 12
Question Простые часы отстают. Причина?

Следующий код работаетб но время отстает примерно на 1с/в мин:

Код AS3:
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.
Старый 26.08.2009, 14:35
random13 вне форума Посмотреть профиль Отправить личное сообщение для random13 Найти все сообщения от random13
  № 2  
Ответить с цитированием
random13
 
Аватар для random13

Регистрация: Oct 2006
Адрес: Москва
Сообщений: 889
первое: оформите код иначе разговаривать не будут
второе: во флеше таймер имеет такое свойство врать и очень зависим от производительности компьютера

Старый 26.08.2009, 15:35
kolypaev вне форума Посмотреть профиль Отправить личное сообщение для kolypaev Найти все сообщения от kolypaev
  № 3  
Ответить с цитированием
kolypaev

Регистрация: Aug 2009
Сообщений: 17
могу посоветовать использовать Event.ENTER_FRAME и скипать лишние кадры.
т.е. например флеха рааботает 24 кадра в секунду. Нужно создать переменную, которая будет увеличиваться на 1 каждый раз. И когда переменная равна 24, т.е. 1 кадр в секнду, выполняем нужный код. и обнуляем переменную, которая считает кадры.
Аналогичным образом можно сделать выполнение кода не раз в секнуд, а расчитать на любое время.

Старый 26.08.2009, 15:39
Gaen вне форума Посмотреть профиль Отправить личное сообщение для Gaen Найти все сообщения от Gaen
  № 4  
Ответить с цитированием
Gaen
strange mood
 
Аватар для Gaen

модератор форума
Регистрация: Jul 2004
Адрес: Питер
Сообщений: 1,653
Записей в блоге: 1
Отправить сообщение для Gaen с помощью ICQ Отправить сообщение для Gaen с помощью Skype™
Таймер врёт, с этим придётся смириться.
Чтобы ошибка не накапливалась, при запуске таймера нужно запомнить текущее время, и при срабатываии таймера вычислять, сколько времени реально прошло.
__________________
тонкий тролль, осеянный благодатью

Старый 26.08.2009, 15:50
iflamberg вне форума Посмотреть профиль Отправить личное сообщение для iflamberg Найти все сообщения от iflamberg
  № 5  
Ответить с цитированием
iflamberg
 
Аватар для iflamberg

Регистрация: Jan 2009
Сообщений: 1,651
2kolypaev:
enterFrame еще более неточный, чем Timer и getTime.

отречься от таймера надобно и обратиться к силе new Date().

Старый 26.08.2009, 16:00
ToRR вне форума Посмотреть профиль Отправить личное сообщение для ToRR Найти все сообщения от ToRR
  № 6  
Ответить с цитированием
ToRR

Регистрация: Feb 2007
Сообщений: 63
а если юзер ручками переведет дату между двумя new Date().time?
ps: а как с точностью у flash.utils.getTimer() ?


Последний раз редактировалось ToRR; 26.08.2009 в 16:09.
Старый 26.08.2009, 16:43
Sprynk вне форума Посмотреть профиль Отправить личное сообщение для Sprynk Найти все сообщения от Sprynk
  № 7  
Ответить с цитированием
Sprynk

Регистрация: Aug 2009
Сообщений: 12
Спасибо за советы. У меня получилась след. версия:
Код AS3:
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));
	}
Все работает, но на мой взгляд *порнушно* как-то. Иногда секунды скачут не в такт, если таймер поставить на 200 или меньше, то секунды тикают как надо
А можно ли вытащить системное время без конструктора?
И нужно ли удалять экземпляр now?
Не засораю ли я память все новыми и новыми экземплярами?


Последний раз редактировалось Sprynk; 26.08.2009 в 16:52.
Старый 26.08.2009, 17:06
Gaen вне форума Посмотреть профиль Отправить личное сообщение для Gaen Найти все сообщения от Gaen
  № 8  
Ответить с цитированием
Gaen
strange mood
 
Аватар для Gaen

модератор форума
Регистрация: Jul 2004
Адрес: Питер
Сообщений: 1,653
Записей в блоге: 1
Отправить сообщение для Gaen с помощью ICQ Отправить сообщение для Gaen с помощью Skype™
Всё нормально
Экземпляр now объявляется как локальная переменная, ссылка на которую теряется после выхода из функции, поэтому мусорщик спокойно соберёт его.
__________________
тонкий тролль, осеянный благодатью

Старый 27.08.2009, 12:53
iflamberg вне форума Посмотреть профиль Отправить личное сообщение для iflamberg Найти все сообщения от iflamberg
  № 9  
Ответить с цитированием
iflamberg
 
Аватар для iflamberg

Регистрация: Jan 2009
Сообщений: 1,651
я б вообще не на таймер это вешал, а на enterFrame.

Старый 29.08.2009, 13:21
Sprynk вне форума Посмотреть профиль Отправить личное сообщение для Sprynk Найти все сообщения от Sprynk
  № 10  
Ответить с цитированием
Sprynk

Регистрация: Aug 2009
Сообщений: 12
Выяснил главное - таймеру верить нельзя.
Собственно, тема закрыта.

Создать новую тему Ответ Часовой пояс GMT +4, время: 00:19.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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