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

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

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > 3D-программирование

3D-программирование Вопросы, касающиеся программирования 3D мира

Ответ
 
Опции темы
Старый 19.01.2007, 05:58   #1
stone_evil
ПроЭктировщик
 
Регистрация: 17.10.2006
Сообщений: 170
Написано 18 полезных сообщений
(для 42 пользователей)
Смех Синхронизация юнитов в стратегии

Уважаемые, у кого есть ссылки на рускоязычные материалы по данной тематике или накопленный годами опыт, не скрывайте.
Есть стратегия для двоих игроков, реализация: сервер-клиент. В зависимости от разных факторов одни и те же юниты могут на сервере и на клиенте иногда асинхронизироваться. Необходимая задача: иногда (например, при коллизии) синхронизировать юнит на клиенте с сервером.
Как это реализовано сейчас - если необходимо синхронизировать юнит, с сервера передаются его параметры (x,y,z) на клиента, где при их получении юнит сразу же занимает указанную позицию. Чтобы не было асинхронизации, то же самое происходит и на сервере через время, равное пингу. Все замечательно, только есть минус - пока пакет идет от сервера к клиенту, на клиенте юнит успевает пройти определенное расстояние, и после перепозиционирования происходит эффект дергания, т.е. юнит возвращается в ту точку, которую он уже прошел (грубо говоря, на сервере происходит то же самое). Хочется этого избежать, ибо не истина это. Но тогда необходимо переделать систему синхронизации, придумать алгоритм, позволяющий каким-то образом рассчитывать местонахождение юнита на клиенте через время пинга по отношению к серверу, и посылать уже эти координаты, чтобы синхронизировать юнит без отката назад. В случае с обычным передвижением по прямой это сделать можно, но в случае с коллизиями невозможно рассчитать точно, какое расстояние пройдет юнит через время пинга, потому что коэффициент скольжения при коллизии, замедляющий передвижение, величина непостоянная и вообще неизвестен.
Вобщем пока ничего толкового в голову не пришло, может есть у кого-нибудь соображения на этот счет?
(Offline)
 
Ответить с цитированием
Старый 19.01.2007, 08:50   #2
jimon
 
Сообщений: n/a
Re: Синхронизация юнитов в стратегии

иметь два уровня синхронизации с сервером
1) мягкий
2) жосткий

при первом ты сглаживаеш путь который проходится ....
ну всмысле сплайнами двигаеш юнитов

второй юзается только когда юнит далеко отошол от того что хранится на сервере
 
Ответить с цитированием
Старый 19.01.2007, 11:18   #3
stone_evil
ПроЭктировщик
 
Регистрация: 17.10.2006
Сообщений: 170
Написано 18 полезных сообщений
(для 42 пользователей)
Re: Синхронизация юнитов в стратегии

Сообщение от jimon
иметь два уровня синхронизации с сервером
1) мягкий
2) жосткий

при первом ты сглаживаеш путь который проходится ....
ну всмысле сплайнами двигаеш юнитов

второй юзается только когда юнит далеко отошол от того что хранится на сервере
Я не совсем понял, в чем их суть.
По поводу сглаживания в первом случае. Двигать сплайнами - это двигать прямыми, насколько я понял? Не представляю пока, как двигать прямыми при коллизии двух сфер, если их соприкосновение проходит по дуге? Как вариант, при коллизии возможно поворачивать юниты в стороны и отходить по прямой, я этот вариант сейчас разрабатываю, но даже при таком подходе не совсем понятно, как синхронизировать, потому что неизвестно, через время пинга юнит повернется уже и пойдет, или будет все еще поворачиваться. Какие параметры юнита кидать на клиента для синхронизации, чтобы попасть в точку?
По поводу второго тоже не понял - синхронизировать юнит, когда они сильно разнятся на сервере и на клиенте? Это мне вообще не нравится - если предположим на сервере юнит дошел до цели, использовал ее и уже обрабатывает другое задание, а на клиенте он только у этой цели, то можно так синхронизнуть, что вообще бардак получится - на сервере цель удалилась, на клиенте осталась, а юнит уже пошел по своим делам.
Может я чего недопонял?
(Offline)
 
Ответить с цитированием
Старый 19.01.2007, 12:08   #4
Diplomat
Дэвелопер
 
Регистрация: 07.09.2005
Сообщений: 1,519
Написано 66 полезных сообщений
(для 164 пользователей)
Re: Синхронизация юнитов в стратегии

Выражаясь примитивно, все коллизии- на сервере. А клиенты без всяких коллизий двигаются по указке с сервера.
(Offline)
 
Ответить с цитированием
Старый 19.01.2007, 13:30   #5
stone_evil
ПроЭктировщик
 
Регистрация: 17.10.2006
Сообщений: 170
Написано 18 полезных сообщений
(для 42 пользователей)
Re: Синхронизация юнитов в стратегии

Сообщение от Diplomat
Выражаясь примитивно, все коллизии- на сервере. А клиенты без всяких коллизий двигаются по указке с сервера.
Все коллизии и так проверяются только на сервере, а на клиенте юниты по указке сервера встают в нужные позиции. Повторюсь. Для того, чтобы двигаться по указке сервера, необходимо, чтобы сервер передавал текущие параметры юнита клиенту. Пока эти параметры идут по сети, проходит определенное время, и данные устаревают. Как решить эту проблему?
(Offline)
 
Ответить с цитированием
Старый 19.01.2007, 14:50   #6
Diplomat
Дэвелопер
 
Регистрация: 07.09.2005
Сообщений: 1,519
Написано 66 полезных сообщений
(для 164 пользователей)
Re: Синхронизация юнитов в стратегии

Так экстраполируй. То есть передавай клиенту не то, что на сервере сейчас, а то, что предположительно будет через время пинга. А клиент пусть не тупо ставит в полученные координаты, иначе пойдут рывки, а с умом: плавно подгоняя "то шо есть" под "то шо надо". А как там ты это сделаешь- линейной интерполяцией, аль через сплайны кубические- это уже как на душу ляжет.
Причём, заметь, (не обижайся, а вдруг не знаешь?) передавать данные можно далеко не каждый проход цикла на сервере, а только тогда, когда что-то в процессах изменяется (например юнит поменял направление движения или остановился).
(Offline)
 
Ответить с цитированием
Старый 22.01.2007, 05:30   #7
stone_evil
ПроЭктировщик
 
Регистрация: 17.10.2006
Сообщений: 170
Написано 18 полезных сообщений
(для 42 пользователей)
Re: Синхронизация юнитов в стратегии

Да нет, какие обиды, все мы случайные гости на этом празднике жизни
Данные у меня так и передаются, только при изменении процесса. Я как раз вопрос про экстраполяцию и задавал: "В случае с обычным передвижением по прямой это сделать можно, но в случае с коллизиями невозможно рассчитать точно, какое расстояние пройдет юнит через время пинга, потому что коэффициент скольжения при коллизии, замедляющий передвижение, величина непостоянная и вообще неизвестен." Т.е. я не знаю, как точно рассчитать расстояние, которое пройдет юнит, когда его сфера скользит по сфере другого юнита и замедляет передвижение. Что такое кубические сплайны, может это мне поможет?
(Offline)
 
Ответить с цитированием
Старый 25.01.2007, 13:03   #8
Errthou
Оператор ЭВМ
 
Регистрация: 22.01.2007
Сообщений: 32
Написано 0 полезных сообщений
(для 0 пользователей)
Re: Синхронизация юнитов в стратегии

Вообще, есть смысл те передвижения, которые игровой процесс не сильно затрагивают, оставить клиенту... Например коллизии с дружественными юнитами можно не считать вообще, а при обработке клиентом для того, чтобы один юнит не стоял на другом,уже расставлять их по воле клиента... и т.д.
(Offline)
 
Ответить с цитированием
Старый 25.01.2007, 13:58   #9
stone_evil
ПроЭктировщик
 
Регистрация: 17.10.2006
Сообщений: 170
Написано 18 полезных сообщений
(для 42 пользователей)
Re: Синхронизация юнитов в стратегии

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


Опции темы

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
глючный бомбермэн с движком стратегии и графикой из старкрафта aureli0 Основной форум 5 29.06.2007 00:12
Стратегии. kortesfil 2D-программирование 15 23.04.2007 17:14
Несколько вопросов по стратегии MiXaeL 3D-программирование 13 08.10.2006 22:06


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


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