Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Проверка времени (http://www.flasher.ru/forum/showthread.php?t=213712)

Партизан 23.12.2016 09:52

Цитата:

Сообщение от TEI (Сообщение 1198180)
Мне нужно время не с момента запуска игры, а глобальное время. 22.12.2016 21:33

Вам уже кучу постов с вариантами решения через getTimer() написали. В документации по Date() от Adobe так же рекомендуют использование getTimer()
Цитата:

Чтобы вычислить относительное или прошедшее время, воспользуйтесь методом getTimer() из пакета flash.utils.
Если этого мало для вашей задачи, оставьте как есть. Единственное, рекомендую принудительно удалять созданный экземпляр Date.

faraday 23.12.2016 14:04

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

Tails 23.12.2016 14:47

Код 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();
                }
        }
}


faraday 23.12.2016 16:47

Tails, ты не наблюдал рассинхрон времени? использую аналогичный код, и постоянно ловлю репорты что несовпадает с сервом, при пинге меньше секунды

Tails 23.12.2016 17:04

faraday
Нет, не наблюдал. Какого рода рассинхрон? Разница постепенно накапливается или фиксированная с самого начала?

faraday 23.12.2016 17:22

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

caseyryan 23.12.2016 17:43

Цитата:

Сообщение от faraday (Сообщение 1198199)
постепенно, когда расхждение больше 10 секунд - синхронизирует с сервом, и через пару минут рассинхрон опять. бывает где-то у 5% игроков, на протяжении всей сессии

Может у них дико тормозит все?
Хотя, сдается мне, ошибка в коде

faraday 23.12.2016 18:01

Врядли в таком коде может быть ошибка. расхождения дает как 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);
                }


Партизан 23.12.2016 18:24

Цитата:

Сообщение от faraday (Сообщение 1198202)
Врядли в таком коде может быть ошибка.

Думаю если округлять до 5 секунд расхождение будет еще больше...

undefined 23.12.2016 18:29

Цитата:

Может у них дико тормозит все?
тогда бы у них и часы отставали.Вообще вроде как часы зависят только от батарейки на материнке и тормозить не могут по определению.


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

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