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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 23.12.2016, 09:52
Партизан вне форума Посмотреть профиль Отправить личное сообщение для Партизан Найти все сообщения от Партизан
  № 11  
Ответить с цитированием
Партизан
 
Аватар для Партизан

блогер
Регистрация: Nov 2007
Адрес: Almaty, Moscow
Сообщений: 396
Записей в блоге: 5
Отправить сообщение для Партизан с помощью Skype™
Цитата:
Сообщение от TEI Посмотреть сообщение
Мне нужно время не с момента запуска игры, а глобальное время. 22.12.2016 21:33
Вам уже кучу постов с вариантами решения через getTimer() написали. В документации по Date() от Adobe так же рекомендуют использование getTimer()
Цитата:
Чтобы вычислить относительное или прошедшее время, воспользуйтесь методом getTimer() из пакета flash.utils.
Если этого мало для вашей задачи, оставьте как есть. Единственное, рекомендую принудительно удалять созданный экземпляр Date.

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

Регистрация: Apr 2009
Сообщений: 409
Еще для проврки времени, нужно по каждому завершению таймера делать синхронизацию времени с сервером. у некоторых игроков за час время клиента расходится с сервером на 5 и больше минут, причина так и не обнаружена

Старый 23.12.2016, 14:47
Tails вне форума Посмотреть профиль Отправить личное сообщение для Tails Найти все сообщения от Tails
  № 13  
Ответить с цитированием
Tails
 
Аватар для Tails

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
Код AS3:
package pocket.clock
{
	import flash.utils.getTimer;
 
	/**
	 * Игровые часы.
	 * Содержит текущее время, которое берётся из системы пользователя.
	 * Можно синхронизировать часы, указав собственное текущее время.
	 * @author Roman A.V.
	 */
	public class Clock
	{
 
		// Приват
		private var _runDate:Number;
 
		/**
		 * Создать часы.
		 * Текущее время берётся из системы пользователя.
		 */
		public function Clock()
		{
 
			// Инициализация.
			// Получаем системное время:
			_runDate = new Date().time;
 
			// Вычитаем уже прошедшее время, так-как используем дату как точку отсчёта:
			_runDate -= getTimer();
 
			// Не может быть NaN или меньше 0:
			if (isNaN(_runDate) || _runDate < 0)
				_runDate = 0;
		}
 
		// ПАБЛИК
		/**
		 * Синхронизировать текущее время.
		 * Передайте текущее время, если требуется синхронизировать часы.
		 * Этот вызов также изменит значение переменной <code>runDate</code>.
		 * @param	time Миллисекунды, прошедшие с 1 января 1970 года.
		 */
		public function setCurrentTime(time:Number):void
		{
			_runDate = time - getTimer();
 
			// Не может быть NaN или меньше 0:
			if (isNaN(_runDate) || _runDate < 0)
				_runDate = 0;
		}
 
		// ГЕТТЕРЫ
		/**
		 * Дата запуска приложения. (mc)
		 * Указывает дату, когда было запущено текущее приложение.
		 * Миллисекунды, прошедшие с 1 января 1970 года.
		 * Не может быть NaN или меньше 0.
		 */
		public function get runDate():Number
		{
			return _runDate;
		}
 
		/**
		 * Текущее время. (mc)
		 * Возвращает количество миллисекунд, прошедших на момент вызова с 1 января 1970 года.
		 * Не может быть NaN.
		 */
		public function get currentTime():Number
		{
			return _runDate + getTimer();
		}
	}
}
__________________
Дети не должны знать о своих родителях


Последний раз редактировалось Tails; 23.12.2016 в 15:13.
Старый 23.12.2016, 16:47
faraday вне форума Посмотреть профиль Отправить личное сообщение для faraday Найти все сообщения от faraday
  № 14  
Ответить с цитированием
faraday
 
Аватар для faraday

Регистрация: Apr 2009
Сообщений: 409
Tails, ты не наблюдал рассинхрон времени? использую аналогичный код, и постоянно ловлю репорты что несовпадает с сервом, при пинге меньше секунды

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

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
faraday
Нет, не наблюдал. Какого рода рассинхрон? Разница постепенно накапливается или фиксированная с самого начала?
__________________
Дети не должны знать о своих родителях

Старый 23.12.2016, 17:22
faraday вне форума Посмотреть профиль Отправить личное сообщение для faraday Найти все сообщения от faraday
  № 16  
Ответить с цитированием
faraday
 
Аватар для faraday

Регистрация: Apr 2009
Сообщений: 409
постепенно, когда расхждение больше 10 секунд - синхронизирует с сервом, и через пару минут рассинхрон опять. бывает где-то у 5% игроков, на протяжении всей сессии

Старый 23.12.2016, 17:43
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 17  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Сообщение от faraday Посмотреть сообщение
постепенно, когда расхждение больше 10 секунд - синхронизирует с сервом, и через пару минут рассинхрон опять. бывает где-то у 5% игроков, на протяжении всей сессии
Может у них дико тормозит все?
Хотя, сдается мне, ошибка в коде
__________________
Ко мне можно и нужно обращаться на ты)

Старый 23.12.2016, 18:01
faraday вне форума Посмотреть профиль Отправить личное сообщение для faraday Найти все сообщения от faraday
  № 18  
Ответить с цитированием
faraday
 
Аватар для faraday

Регистрация: Apr 2009
Сообщений: 409
Врядли в таком коде может быть ошибка. расхождения дает как getTimer, так и new Date().getTime(), сетер добавлен как вынужденая мера именно из-за постоянных расхождений, так больше не что не влияет. приходится добавлять время в каждый ответ сервера, и синхронизировать каждый таймер в момент инициализации и завершения. геморой на ровном месте
Код AS3:
	public static function init(time:int) {
			serverTime = time;
			timer.start();
			timer.addEventListener(TimerEvent.TIMER, updateTime);
		}
		private static function updateTime(t:TimerEvent = null) {
			_now = elapse + timeDiff; 
			dispatchEventWith(Clock.TICK, false, serverTime);
		}
		public static function set serverTime(time:int):void{
			timeDiff = time - elapse;
			updateTime();
		}
		public static function get serverTime():int{
			return _now;
		}	
		static public function get elapse():int 
		{
			return Math.floor(getTimer() / 1000);
		}


Последний раз редактировалось faraday; 23.12.2016 в 19:13.
Старый 23.12.2016, 18:24
Партизан вне форума Посмотреть профиль Отправить личное сообщение для Партизан Найти все сообщения от Партизан
  № 19  
Ответить с цитированием
Партизан
 
Аватар для Партизан

блогер
Регистрация: Nov 2007
Адрес: Almaty, Moscow
Сообщений: 396
Записей в блоге: 5
Отправить сообщение для Партизан с помощью Skype™
Цитата:
Сообщение от faraday Посмотреть сообщение
Врядли в таком коде может быть ошибка.
Думаю если округлять до 5 секунд расхождение будет еще больше...

Старый 23.12.2016, 18:29
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 20  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,282
Цитата:
Может у них дико тормозит все?
тогда бы у них и часы отставали.Вообще вроде как часы зависят только от батарейки на материнке и тормозить не могут по определению.

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

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

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


 


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


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