Я реализую многопользовательский клон астероидов, чтобы узнать об архитектуре клиент-серверной сети в играх. Я потратил время на чтение публикаций GafferOnGames и Valve о технологиях клиент / сервер. У меня проблемы с двумя понятиями.
В настоящее время у меня есть авторитетный игровой сервер, симулирующий физику с box2d и рассылающий информацию о состоянии мира клиентам примерно 20 раз в секунду. Каждый клиент отслеживает последние несколько снимков, которые он получил, и переключается между двумя состояниями, чтобы сгладить движение спрайтов. Однако это не так гладко. Это может быть некоторое время сглаживанием, затем немного подергиванием, затем возвращением к сглаживанию и т. Д. Я пробовал оба протокола TCP и UDP, оба они примерно одинаковы. Есть идеи, в чем может быть моя проблема? (Примечание: я реализовал это сначала для одиночной игры, и движение спрайтов было совершенно плавным при 60 кадрах в секунду при обновлении мира физики только 20 раз в секунду).
Чтобы решить первую проблему, я подумал, что, возможно, клиент также должен запустить симуляцию box2d и просто обновить позиции своих спрайтов, чтобы они соответствовали снимкам сервера, когда они не совпадают. Я подумал, что это может быть более плавным, поскольку моя однопользовательская реализация гладкая. Это хорошая идея?
Даже если это не решит вышеуказанную проблему, нужно ли это для предсказания на стороне клиента? Например, если игрок пытается переместить свой корабль, как он узнает, что он ударил астероид, стену или вражеский корабль без физического моделирования? Похоже, что их корабль пройдет через объект, с которым он должен столкнуться, прежде чем они получат снимок с сервера, который говорит, что они попали в объект.
Благодарность!