forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Математика (http://forum.boolean.name/forumdisplay.php?f=85)
-   -   Интерполяция / экстрополяция (http://forum.boolean.name/showthread.php?t=19861)

RegIon 02.06.2015 21:20

Интерполяция / экстрополяция
 
Возникла небольшая необходимость адекватно понять как сделать интерпляцию или экстраполяцию.
Для примера мой проект: http://playcanv.as/p/N9yAibo7 :rolleyes:
В нем заметен забавные эффекты шара из-за интерполяции и пинга, так не должно быть (скругленные углы, недолеты до объектов, развороты).

Жду совета что лучше использовать и какими методами.

PS. На текущий момент дела так :
1. Вычисляю направление по 2 точкам (старому положению и тому, которое пришло с сервера)
2. Двигаю по этому вектору средствами клиента со скоростью, полученной с сервера.

moka 02.06.2015 23:04

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

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

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

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

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


Часовой пояс GMT +4, время: 14:36.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot