Синхронизация юнитов в стратегии
Уважаемые, у кого есть ссылки на рускоязычные материалы по данной тематике или накопленный годами опыт, не скрывайте.
Есть стратегия для двоих игроков, реализация: сервер-клиент. В зависимости от разных факторов одни и те же юниты могут на сервере и на клиенте иногда асинхронизироваться. Необходимая задача: иногда (например, при коллизии) синхронизировать юнит на клиенте с сервером.
Как это реализовано сейчас - если необходимо синхронизировать юнит, с сервера передаются его параметры (x,y,z) на клиента, где при их получении юнит сразу же занимает указанную позицию. Чтобы не было асинхронизации, то же самое происходит и на сервере через время, равное пингу. Все замечательно, только есть минус - пока пакет идет от сервера к клиенту, на клиенте юнит успевает пройти определенное расстояние, и после перепозиционирования происходит эффект дергания, т.е. юнит возвращается в ту точку, которую он уже прошел (грубо говоря, на сервере происходит то же самое). Хочется этого избежать, ибо не истина это. Но тогда необходимо переделать систему синхронизации, придумать алгоритм, позволяющий каким-то образом рассчитывать местонахождение юнита на клиенте через время пинга по отношению к серверу, и посылать уже эти координаты, чтобы синхронизировать юнит без отката назад. В случае с обычным передвижением по прямой это сделать можно, но в случае с коллизиями невозможно рассчитать точно, какое расстояние пройдет юнит через время пинга, потому что коэффициент скольжения при коллизии, замедляющий передвижение, величина непостоянная и вообще неизвестен.
Вобщем пока ничего толкового в голову не пришло, может есть у кого-нибудь соображения на этот счет?
|