|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Как сделать синхронизацию с сервером
Всем HOLA!
Собственно, сабж... Хочу сделать что-то типа стрелялки По идее единственно-верная картина мира есть только у сервера. Каждый пользователь, отправляя данные (идти, стрельнуть, кинуть) посылает время исполнения этой команды, чтобы не было коллизий (типа подобрать один предмет одновременно двум игрокам). Получается, что сервер должен хранить несколько последних состояний мира и учитывать, чья команда "подобрать" должна быть выполнена раньше? Не могу алгоритм выстроить... =) Буду рад любым подсказкам, заранее спасибо
__________________
...вселенская грусть |
|
|||||
Banned
[+4 25.09.09]
[+1 12.11.09] [+4 12.12.09] Регистрация: Sep 2009
Сообщений: 231
|
это что-то real-time или что-то пошаговое?
если real-time, то зачем "хранить несколько последних состояний мира" ? кто раньше прислал подобрать - того и предмет. |
|
|||||
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
сервер - Модель.
клиенты - Виды. 1 клиент говорит хочу взять предмет. сервер убирает предмет и сообщает что 1 клиент его взял 2 клиент успевает сказать - хочу взять предмет. но сервер не обрабатывает это так как предмет уже взяли. и 2 клиенту присылает что предмет достался первому)
__________________
Отряд Котовскага |
|
|||||
Идею понял, но:
приходит 2 одинаковых команды: подобрать предмет команда содержит время отправки команда, у которой время отправки раньше, приходит после команды, у которой время отправки позже, то есть вот в таком порядке: 1) [name:X action:getItem time: 23:46] 2) [name:Y action:getItem time: 23:45] Или проще не заморачиваться? Что раньше пришло, то и сработает? Просто ключевой момент вот в чем: 2 игрока стреляют друг в друга одновременно. У №1 пинг 10, у №2 пинг 20. Если №2 стрельнет на 11 миллисекунду раньше, то он победил. При этом если №1 стрельнет на 9 миллисекунд позже - он все равно молодец. Состояния мира (как я полагаю) для того и нужны, чтобы понять кто где был и кто в кого попал в момент исполнения команды. ...Или все таки забить? =)
__________________
...вселенская грусть |
|
|||||
Banned
[+4 25.09.09]
[+1 12.11.09] [+4 12.12.09] Регистрация: Sep 2009
Сообщений: 231
|
по вашей модели у всех игроков игра будет тормозить одинаково - пришел чел с большим пингом все тормозят..
real-time он на то и риалтайм.. |
|
|||||
Почему? Просто обработка команд будет искусственно заморожена на некое время.
Сервер же не знает, пришлет кто-то еще одну команду, или нет По идее, он просто должен получить команду, подождать 25 мс (мало ли, еще от кого придет) и выполнить, соответственно уведомив всех клиентов об этом. Кто не уложился по пингу - я не виноват=) Но опять же, подождать 25 мс = увеличить пинг всех игроков на это время Честно говоря, я понятия не имею как надо делать подобные системы компенсации лагов. Хотелось бы узнать, кто и как решал подобные проблемы. Реалтайм он на то и реалтайм, согласен =)
__________________
...вселенская грусть |
|
|||||
Регистрация: Mar 2008
Сообщений: 215
|
А какой-нибудь пользователь вдруг начнет говорить, что он уже час(год?) назад как выстрелил - и будет ему вечное счастье. Вы этого хотите?
В общем случае вряд ли удастся обойти эту проблему... На самом деле тоже интересно решение такой задачи |
|
|||||
strange mood
|
http://flasher.ru/forum/showthread.php?t=127976 вот вам небольшой холивар на заданную тему
__________________
тонкий тролль, осеянный благодатью |
Часовой пояс GMT +4, время: 18:27. |
|
« Предыдущая тема | Следующая тема » |
|
|