170 похожих чатов

Здравствуйте, объясните принцип интерполяции и экстраполяции(согласование с сервером). Теоретически понимаю,

можете ближе к практике объяснить?

14 ответов

24 просмотра

Интерполяция - есть отрезок времени. В геймдеве, как правило, это время между тиками сервера, когда клиент знает начальную позицию (время предыдущего тика) и конечную позицию (время настоящего тика). Задача клиента интерполировать передвижение до получения следующего обновления информации (т. е. тика)

Dlazder- Автор вопроса
МСМК
Интерполяция - есть отрезок времени. В геймдеве, к...

Я просто начал делать онлайн игру, и, надо устранить задержку между клиентом и сервером

Задержку ты никак не устранишь, даже посадив клиентов вплотную друг к другу, но минимизировать (вплоть до того, чтобы сделать её незаметной) можно

Dlazder
Я просто начал делать онлайн игру, и, надо устрани...

Многопользовательские игры. Разработка сетевых приложений. Джошуа Глейзер, Санджай Мадхав

Dlazder- Автор вопроса
МСМК
Задержку ты никак не устранишь, даже посадив клиен...

Ну это понятно. У меня есть тик на сервере и на клиенте, и на сервере он отстает, а так как все передвижение идет на сервере (хоть у меня и идет отображение на клиенте сразу, сервер подтверждает это) из за этого возникает мерцание

Dlazder
Ну это понятно. У меня есть тик на сервере и на кл...

Тебе нужно интерполировать и на сервере, и на клиенте

Dlazder- Автор вопроса
МСМК
Тебе нужно интерполировать и на сервере, и на клие...

Как?) Можете описать алгоритм решения задачи примерный? Как это должно работать?

Dlazder
Как?) Можете описать алгоритм решения задачи приме...

Да невозможно это описать в двух словах. Есть множество нюансов: сетевые задержки, дропы пакетов и т. д. Вкратце я написал, а далее либо к умным дядечкам за деньги, либо к книгам и самостоятельному познанию

Dlazder- Автор вопроса
Dlazder
Хорошо) буду тогда искать дальше

Экстраполяция это вообще целый сложнейший блок, где множество вариантов решения, реализация которых зависит от механик твоей игры

Dlazder- Автор вопроса
Dlazder
Как?) Можете описать алгоритм решения задачи приме...

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

Dlazder
Как?) Можете описать алгоритм решения задачи приме...

Смотри, самый простой пример c перемещением игрока Без интерполяции на клиенте: С сервера каждый тик приходит новая позиция игрока, и ты просто присваиваешь на клиенте координаты игрока. В этом кейсе возникает неприятный эффект телепортации, так как координаты будут меняться на величину заметную для глаза, (сильно больше, чем при движении на клиенте) Пример кода: player.setData('x', playerDataFromServer.x); player.setData('y', playerDataFromServer.y); С интерполяцией на клиенте: Тут почти всё тоже самое, только мы не присваиваем на клиенте координаты пришедшие с сервера, а уже прибегаем к интерполяции, например к линейной. Тут мы используем текущие координаты на клиенте, новые координаты с сервера и коэффициент интерполяции Пример кода: player.setData('x', Phaser.Math.Interpolation.Linear(player.x, playerDataFromServer.x, 0.2); player.setData('y', Phaser.Math.Interpolation.Linear(player.x, playerDataFromServer.x, 0.2); В этом случае у нас уже персонаж будет передвигаться плавно, и это можно регулировать коэффициентом интерполяции. Если коэффициент будет высокий, то будет казаться что персонаж "Плавает"

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта