Я пытаюсь использовать «время тика» для отслеживания времени в моей игре PNaCl, потому что время игры не должно зависеть от того, как пользователь настраивает свои системные часы.
Я хотел бы использовать оба pp::Core::GetTimeTicks()
а также pp::InputEvent::GetTimeStamp()
запустить мой игровой симулятор. Логика выглядит так: когда происходит событие ввода, запускайте симуляцию, пока время игры не совпадет pp::InputEvent::GetTimeStamp()
этого события. Когда происходит обратный вызов завершения рендеринга, запускайте симуляцию, пока время игры не совпадет pp::Core::GetTimeTicks()
,
Это хорошо работает для начала, и этот сценарий использования, кажется, поддерживается, насколько я понимаю документацию, от pp::Core::GetTimeTicks()
:
Эти часы используются браузером при передаче некоторого времени события в модуль (например, с использованием поля PP_InputEvent :: time_stamp_seconds).
Однако, когда я перехожу в спящий режим и снова открываю его, эти два часа, кажется, не синхронизированы по времени, в течение которого компьютер спал. pp::Core::GetTimeTicks()
кажется, перестала работать, пока система спала, в то время как pp::InputEvent::GetTimeStamp()
кажется, работает. Входные события помечаются временем перед опорными часами на количество времени, в течение которого система находилась в спящем режиме.
Это побеждает использование обоих часов для отсчета времени. Обходной путь — использовать тактовую частоту ядра при запуске симуляции в ответ на событие ввода, но это может вызвать большую задержку между нажатиями клавиш и действием на экране. Другой обходной путь — просто не запускать симуляцию в ответ на входные события. Тем не менее, я хотел бы докопаться до этой загадки.
Это ошибка в реализации? Это ошибка в документации, которая говорит о том, что эти времена должны быть синхронизированы? Или я неправильно читаю документацию?
Я испытываю это на Chrome 33.0.1750.152 (Официальная сборка 256984) для Linux.
Это похоже на ошибку. InputEvent возвращает PP_TimeTicks. Временные тики должны иметь поведение, которое вы видите через Core :: GetTimeTicks ().
Но входные события возвращают вам время настенных часов. Это действительно правильно, так как событие ввода перца должно соответствовать событию DOM, а событие ввода DOM указывается как время с 1970 года (время настенных часов).
Поведение является правильным, но тип возвращаемого значения для GetTimeStamp должен быть PP_Time. Я подам это.
Других решений пока нет …