Эта страница ещё не переведена — показана английская версия.
Как показывать других игроков
Других игроков никто не предсказывает — их показывают. Их состояние приходит с интервалами, а в промежутках вы что-то рисуете. Ошибка здесь стоит заметного рывка, а не жизни, поэтому у этого механизма свои объявления, отдельные от объявлений предсказания.
Режим отображения объявляется
Для чужих сущностей (entity) комната объявляет, чем заполнять промежуток между пришедшими состояниями: интерполировать между теми, что уже есть, или экстраполировать дальше самого нового. Это объявление на сущности, поэтому ответ одинаков на всех клиентах и не зависит от того, кто писал рендерер.
Задержка интерполяции тоже объявляется. Чтобы другие игроки двигались плавно, их приходится показывать с небольшим опозданием — на объявленную величину. Это число вы настраиваете под свой жанр.
Экстраполяция останавливается, а не выдумывает
Окно экстраполяции объявляется. Когда оно истекает, сущность перестаёт показываться движущейся и не продолжает путь наугад. Если экстраполировать бесконечно, игрок (player) будет целиться туда, где цели никогда не было, и даже не поймёт этого. Видимая остановка — сбой, после которого игра восстанавливается.
Почему это отдельно от предсказания своего движения
У трёх механизмов предсказания (prediction) разные авторитетные стороны и разная цена ошибки. Если назвать их одним словом, настройка одного будет незаметно менять два других.
| Механизм | Где работает | Цена ошибки |
|---|---|---|
| предсказание своего движения | клиент | коррекция: ввод переигрывается, результат сглаживается |
| показ других игроков | клиент | заметный рывок |
| компенсация лагов | сервер | кто-то погибает несправедливо |
Из-за этого разделения и существует пресет observer, в котором есть только этот механизм. Своего ввода у зрителя нет и предсказывать нечего, так что настройки предсказания описывали бы то, чего он не делает.