Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   www.boolean.name > Программирование в широком смысле слова > Математика

Математика Методы математического моделлирования, программирование математических концепций, роль математики в создании игр

Ответ
 
Опции темы
Старый 02.06.2015, 18:20   #1
RegIon
Элита
 
Аватар для RegIon
 
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,156
Написано 502 полезных сообщений
(для 1,012 пользователей)
Интерполяция / экстрополяция

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

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

PS. На текущий момент дела так :
1. Вычисляю направление по 2 точкам (старому положению и тому, которое пришло с сервера)
2. Двигаю по этому вектору средствами клиента со скоростью, полученной с сервера.
__________________
Сайт: http://iexpo.ml
(Offline)
 
Ответить с цитированием
Старый 02.06.2015, 20:04   #2
moka
.
 
Регистрация: 04.08.2006
Сообщений: 10,429
Написано 3,453 полезных сообщений
(для 6,859 пользователей)
Ответ: Интерполяция / экстрополяция

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

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

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

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

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


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +1, время: 07:13.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com