Прогнозирование на стороне клиента и общий код

Это мой первый вопрос, поэтому, пожалуйста, скажите мне, когда мне нужно кое-что прояснить.

Создание многопользовательской игры в локальной сети было простым, так как вам не нужно иметь дело с интерполяцией, предсказанием на стороне клиента и т. Д. Но как реализовать логику на клиенте и на сервере для предсказания на стороне клиента? Реализовать это два раза или сделать в классе и создать своего рода оболочку для клиента и сервера?

Кроме того, является ли это обычным делом всех данных для полной синхронизации клиента, или вам следует отправлять только некоторые переменные, например, если объект твердый, его положение и форма …?

Итак, у меня есть два основных вопроса:

  1. Обычно на клиенте используются те же классы, что и на сервере? Или они программируют код двумя разными способами как на клиенте, так и на сервере? (Если тот же код, то как?)
  2. Какие данные должны быть разделены между классами? Только части, которые вам всегда будут нужны, или просто синхронизировать все данные между одинаковыми классами на сервере и клиенте?

Примечание: я говорю о предсказании на стороне клиента персонажа, которым вы управляете. Я буду использовать интерполяцию для других объектов.

0

Решение

После большого чтения и некоторого опыта я пришел к некоторым выводам:

Во многих случаях могут использоваться одни и те же классы. Популярный способ обработки синхронизации — позволить этим классам наследовать от класса Realizable. Этот класс будет предоставлять (чистые) виртуальные функции для чтения и записи данных в поток. В случае, если программа размещает сервер, она запросит объект записать свои данные в поток, в противном случае она будет считывать поток, полученный от сервера.

Как правило, вы должны синхронизировать только необходимые данные в функциях, которые читают или записывают в поток.

Похоже, что одним из решений предсказания на стороне клиента является создание PlayerHandler на клиенте, который обрабатывает ввод и тому подобное. Клиент должен знать, каким игроком он управляет. Затем обработчик может временно перезаписать позицию и т.п. объекта. Вам нужно будет написать собственный код для вашей игры, чтобы справиться с остальными.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]