У меня есть много сущностей на стороне клиента, которые моделируются (их скорости добавляются к их позициям на основе кадров), и я позволил им считаться мертвыми. Они посылают обновления о том, где их видели в последний раз и их скорость меняется. Это прекрасно работает, и другие игроки видят эту работу найти. Однако через некоторое время эти игроки начинают рассинхронизироваться через некоторое время. Это из-за задержки.
Я хотел бы знать, как я могу интерполировать между состояниями, чтобы они оказались в правильном положении. Я знаю, где игрока последний раз видели и его текущая скорость, но интерполяция до последнего увиденного состояния заставляет игрока фактически двигаться назад. Я вообще не мог использовать скорость для других клиентов и просто «подталкивал» их в нужном направлении, но я чувствую, что это вызовет неровное движение. Какие есть альтернативы?
источник
Когда ты сказал:
это заставляет меня думать, что ваша проблема может быть больше связана с тем, что ваши часы выходят из строя, чем с какими-либо задержками. Если это задержка, она должна быть такой же плохой на старте, как и через 10 минут. Если одни игровые часы будут работать немного быстрее, чем другие, будут некоторые странные артефакты дрожания, которые со временем будут становиться все хуже и хуже. Клиент может симулировать в будущем, когда текущие пакеты поступают с сервера, он оттягивает клиента назад, заставляя объекты перепрыгивать. Запустите еще несколько тестов, чтобы узнать.
Если рассинхронизация игровых часов действительно является проблемой, вам нужно очень внимательно посмотреть на ваш цикл обновления и убедиться, что каждое обновление основано на количестве пройденного игрового времени (фиксированного или переменного) и что игра -время продвигается, используя что-то вроде настенных часов (не время рендера или другие переменные) У Gaffer есть несколько хороших статей по этому вопросу, и здесь есть достойный вопрос, говорящий о фиксированных и переменных шагах . Надеюсь это поможет.
источник