Показать сообщение отдельно
Старый 02.06.2015, 23:04   #2
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Интерполяция / экстрополяция

На текущий момент ты делаешь интерполяцию.
Учитывая что поведение шарика легко предсказать, то экстраполяцию не сложно будет сделать, ошибки в предсказании будут - и их не избежать.

Предсказывать нужно шарики и платформы тоже.
Предсказывать нужно в будущее на отрезок времени равный половине твоего latency (половине round-trip'а).
Применять свой ввод можно сразу. Если применяешь сразу, то сервер должен будет в будущем учитывать то что сообщение идет от клиента с задержкой, следственно нужно будет немного "играть со временем", а именно если от клиента пришло сообщение что он двигается влево, то значит он уже двигается какое-то время, и нужно это время учесть, двинуть платформу чуток дальше. Но учитывать что он может резко остановиться тоже. Например если задержка у игрока 200мс, и он начал двигаться, но резко остановился через 100мс, то сервер должен двинуть платформу по приходу первого сообщения о движении в направлении куда она двигается, но потом когда получит второе сообщение, от части отменить часть движения.
В общем это не просто. Для этого обычно делают так: игра на сервере сохраняет состояние вещей каждый тик, затем когда приходят сообщение, идешь в прошлое на актуальный тик во время которого клиент сделал решение, и начинаешь применять его действия от туда до настоящего.
Все естественно шлешь только настоящее состояние.

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

Симулировать задержку очень легко, создав таймаут в обработчики сообщений на клиенте.

Для улучшения качества предсказания, клиенты могут симулировать игру (коллизию) по таким же правилам как и сервер, таким образом будет проще получить хорошее состояние игры на клиентах.
(Offline)
 
Ответить с цитированием