Это мой первый вопрос, поэтому, пожалуйста, скажите мне, когда мне нужно кое-что прояснить.
Создание многопользовательской игры в локальной сети было простым, так как вам не нужно иметь дело с интерполяцией, предсказанием на стороне клиента и т. Д. Но как реализовать логику на клиенте и на сервере для предсказания на стороне клиента? Реализовать это два раза или сделать в классе и создать своего рода оболочку для клиента и сервера?
Кроме того, является ли это обычным делом всех данных для полной синхронизации клиента, или вам следует отправлять только некоторые переменные, например, если объект твердый, его положение и форма …?
Итак, у меня есть два основных вопроса:
Примечание: я говорю о предсказании на стороне клиента персонажа, которым вы управляете. Я буду использовать интерполяцию для других объектов.
После большого чтения и некоторого опыта я пришел к некоторым выводам:
Во многих случаях могут использоваться одни и те же классы. Популярный способ обработки синхронизации — позволить этим классам наследовать от класса Realizable. Этот класс будет предоставлять (чистые) виртуальные функции для чтения и записи данных в поток. В случае, если программа размещает сервер, она запросит объект записать свои данные в поток, в противном случае она будет считывать поток, полученный от сервера.
Как правило, вы должны синхронизировать только необходимые данные в функциях, которые читают или записывают в поток.
Похоже, что одним из решений предсказания на стороне клиента является создание PlayerHandler на клиенте, который обрабатывает ввод и тому подобное. Клиент должен знать, каким игроком он управляет. Затем обработчик может временно перезаписать позицию и т.п. объекта. Вам нужно будет написать собственный код для вашей игры, чтобы справиться с остальными.
Других решений пока нет …