Войти
ПрограммированиеФорумСеть

Authoritative server movement in a realtime game

Advanced: Тема повышенной сложности или важная.

#0
1:08, 30 сен. 2013

Кросспост. Гуру мультиплеера, просветите, как нужно делать правильно авторитативный сервер.

Делаю игрушку с простой тайловой 2д физикой. Авторитативный сервер, на клиенте тоже симуляция, но только игрока. Сервер похож на Lite от фотона.
Не получается синхронизировать тики, дельты времени плавают туда-сюда и на сервере и на клиенте, потому завязываю все исключительно на время. Scheduler/coroutine wait for seconds имеют фиговую точность около 63 ms на серваке и 40-80 ms на клиенте, вместо 50. Пытался использовать коррекцию, по типу вычитать разницу между фактической и нужной дельтой из следующей задержки, но получалось еще хуже.
Корректирую позицию плеера по технологии rewind and replay с последнего подтвержденного состояния. Корректировать приходится почти все время, и игрок постоянно дергается при движении. Дергается не потому, что сглаживание отсутствует, а при корректировке назад смещается. Типа как в кс при лагах, шел-шел, телепортнуло назад, снова иду.

Код тут:
http://forum.exitgames.com/viewtopic.ph ... 34&p=14430

Ссылки на сорцы кваки приводить не нужно, ибо C++ - это для меня темный лес, да и перелопачивать весь проект и вычленить принцип нереально.
Ссылку на Valve сеть тоже не надо, 100500 раз уже все прочитано, так и делать пытаюсь.
Тьму тьмущую перечитал инфы, весь гугл перелопатил. Много общих принципов, но нигде не углубляются в детали.


#1
2:49, 30 сен. 2013

MAXIM
> завязываю все исключительно на время.
timestamp какой тип имеет в фотоне?

> точность около 63 ms на серваке и 40-80 ms на клиенте
главное не считать время самому прибавляя его где-то в цикле, брать системное на сервере
и в фотоне по-моему есть синхронизация времени (т.е. клиент знает серверное время с точностью до перемены лага)

> Корректирую позицию плеера по технологии rewind and replay с последнего
> подтвержденного состояния
сервер всегда присылает позиции из прошлого, а клиент с предикшном успевает уже убежать

> при корректировке назад смещается
так вот не надо его телепортить на старую позицию, достаточно посмотреть в истории насколько сильно расходились позиции на указанное время, и если сильно, то пересимулировать с того места аккурат до текущего времени + можно ещё плавно догонять до нужной позиции

ПрограммированиеФорумСеть

Тема в архиве.