![]() |
|
||||||||||
|
|||||
|
Цитата:
Цитата:
|
|
|||||
|
Регистрация: Apr 2009
Сообщений: 409
|
Еще для проврки времени, нужно по каждому завершению таймера делать синхронизацию времени с сервером. у некоторых игроков за час время клиента расходится с сервером на 5 и больше минут, причина так и не обнаружена
|
|
|||||
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. |
|
|||||
|
Регистрация: Apr 2009
Сообщений: 409
|
Tails, ты не наблюдал рассинхрон времени? использую аналогичный код, и постоянно ловлю репорты что несовпадает с сервом, при пинге меньше секунды
|
|
|||||
|
Регистрация: Apr 2009
Сообщений: 409
|
постепенно, когда расхждение больше 10 секунд - синхронизирует с сервом, и через пару минут рассинхрон опять. бывает где-то у 5% игроков, на протяжении всей сессии
|
|
|||||
|
Цитата:
Хотя, сдается мне, ошибка в коде
__________________
Ко мне можно и нужно обращаться на ты) |
|
|||||
|
Регистрация: Apr 2009
Сообщений: 409
|
Врядли в таком коде может быть ошибка. расхождения дает как getTimer, так и new Date().getTime(), сетер добавлен как вынужденая мера именно из-за постоянных расхождений, так больше не что не влияет. приходится добавлять время в каждый ответ сервера, и синхронизировать каждый таймер в момент инициализации и завершения. геморой на ровном месте
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. |
|
|||||
|
Регистрация: Oct 2006
Сообщений: 2,282
|
Цитата:
|
![]() |
![]() |
Часовой пояс GMT +4, время: 19:16. |
|
|
« Предыдущая тема | Следующая тема » |
|
|