Elite Games - Свобода среди звезд!
.
ВНИМАНИЕ!
Наша конференция посвящена космической тематике и компьютерным играм.
Политические вопросы и происходящие в мире события в данный момент на нашем сайте не обсуждаются!

  » Solarwind | страница 2
Конференция предназначена для общения пилотов. Для удобства она разделена на каналы, каждый из которых посвящен определенной игре. Пожалуйста, открывайте темы только в соответствующих каналах и после того, как убедитесь, что данный вопрос не обсуждался ранее.

Поиск | Правила конференции | Фотоальбом | Регистрация | Список пилотов | Профиль | Войти и проверить личные сообщения | Вход

   Страница 2 из 2
На страницу: Пред.  1, 2 | Все страницы
Поиск в этой теме:
Канал Игры Мечты: «Solarwind»
Sh.Tac.
 151 EGP


Рейтинг канала: 5(108)
Репутация: 14
Сообщения: 1426

Зарегистрирован: 27.07.2005
Jurec :
Прям вот так все за мультиплеер?
там вроде нет ничего сложного, единственное клиентская часть на шарпе, и тут либо
1. игровой сервер тоже на шарпе (и какой-нить lidgren)
2. городить огород
_________________
This is what you get ...
(c) Radiohead
    Добавлено: 02:19 27-04-2016   
Jurec
 348 EGP


Ведущий раздела
Рейтинг канала: 4(76)
Репутация: 102
Сообщения: 1441 Заблокирован
Откуда: Seattle
Зарегистрирован: 25.02.2006
Sh.Tac. :
там вроде нет ничего сложного

много сетевых игр сделал? если не учитывать сеть в начале - потом её не встроить без переписывания всей игровой логики
_________________
MOV topka, C++
    Добавлено: 11:05 27-04-2016   
БулерМэн
 420 EGP


Рейтинг канала: 2(21)
Репутация: 68
Сообщения: 1580
Откуда: Гороховец
Зарегистрирован: 07.02.2006
Jurec :
потом её не встроить без переписывания всей игровой логики

Вопрос на мой взгляд - спорный.
Если позволить игроку менять все - а сервер выступает в роли посредника между клиентами и не несет контент/локации - то все перепиливание кода упирается в отслеживании инициализации/уничтожения игровых объектов, передачи состояний этих объектов при возникновении события у объектов. То есть я бы не сказал, что это суперсложная задача.
А вот если хочется сервер, на котором запущена вселенная, и все игровые объекты создаются на сервере, а клиентам отправляются данные о состоянии родительских, серверных объектах - то это сложнее, вот тут огород, таки да.
Просто так летит кораблик, бац, в него попадает ракета - на уровне сетевого обмена это мешанинка, хотя опять таки, если клиент видит только результат взаимодействия объектов на сервере - то это несколько упрощает задачу.

добавлено спустя 3 минуты:
ЗЫ то есть для написания сетевой версии игры - будет достаточно прикрутить к существующей игре - возможность отправлять и принимать состояния объектов. На сервере можно отбросить графику, если только она не участвует в проверке столкновений, что маловероятно, раз ты говоришь, что у тебя 3d.

добавлено спустя 1 минуту:
ЗЫЫ Вообще да, не все так просто Гы-гы

Последний раз редактировалось: БулерМэн (13:51 27-04-2016), всего редактировалось 2 раз(а)
    Добавлено: 13:51 27-04-2016   
Jurec
 348 EGP


Ведущий раздела
Рейтинг канала: 4(76)
Репутация: 102
Сообщения: 1441 Заблокирован
Откуда: Seattle
Зарегистрирован: 25.02.2006
БулерМэн :
Если позволить игроку менять все - а сервер выступает в роли посредника между клиентами и не несет контент/локации - то все перепиливание кода упирается в отслеживании инициализации/уничтожения игровых объектов, передачи состояний этих объектов при возникновении события у объектов. То есть я бы не сказал, что это суперсложная задача.

Гугли lag compensation. Читай http://www.gabrielgambetta.com/fpm3.html
_________________
MOV topka, C++
    Добавлено: 14:03 27-04-2016   
Kann
 64 EGP


Рейтинг канала: 3(45)
Репутация: 7
Сообщения: 232
Откуда: Москва
Зарегистрирован: 11.04.2008
Jurec :

Гугли lag compensation. Читай http://www.gabrielgambetta.com/fpm3.html


У вас же вроде поинт-клик управление ?
тогда причем тут лагокомпенсация ?
    Добавлено: 16:37 27-04-2016   
БулерМэн
 420 EGP


Рейтинг канала: 2(21)
Репутация: 68
Сообщения: 1580
Откуда: Гороховец
Зарегистрирован: 07.02.2006
Jurec :
Читай http://www.gabrielgambetta.com/fpm3.html

Очевидные вещи написаны. Лично я делаю так: сервер - это полновесная игра со всей физикой и математикой, кроме графики, т.к. она там не нужна, да и не может быть, из-за ограничений.
Клиент - движок с прикрученной логикой передачи/приема данных о состоянии объектов.
Следует уточнить, что в моем прототипе игры - одна вселенная или если хотите - одна локация, но бесконечно большая.
Количество игроков в данный момент ограничено 30-ю.
Серверный цикл проверяет наличие поступивших сообщений от игроков. Это позволяет одномоментно изменить все параметры игры для всех игроков, если один из них нажал ВЛЕВО, другой ВПРАВО, а третий стоит на месте. Для всех трех придет ответ о конечном состоянии всей сцены в окрестности игрока.
То есть, на стороне сервера объект уже знает, в пределах какого радиуса вокруг него проверять наличие других объектов, чтобы послать игроку пакет с данными о положении появившегося объекта.
Следовательно, как только объект покидает поле зрения игрока - сервер посылает команду клиенту - уничтожить экземпляр объекта на стороне клиента.

Казалось бы, а что если использовать очереди? Получится, что один шаг сервера это одно действие игрока, то есть цикл проверки входящих значений заменяем циклом работы сервера.
Скажу я так - это геморрой. Три довольно серьезных программы сделал с таким циклом, не советую. Как минимум в плане реализации. Скорости это не прибавит, а вот мучений - гарантированно, и потом не разберешь, откуда ноги растут.
Да, "размазанный цикл" по циклу сервера позволяет показывать процесс работы, отправлять данные по ходу дела, но на скорости работы системы клиент-сервер это в общем не отразится. Если клиенты тормозят на текущей скорости - они так же будут тормозить.
Второй вопрос - сглаживание движения: да, движение объектов задается не передачей ленты UDP-пакетов с текущими координатами объекта игрока, а только изменение состояния - скорости, клавиши.
А вот столкновения - обрабатываются на стороне сервера. Летит корабль, например с постоянной скоростью, при этом игрок управляет "призраком" объекта, который движется в космическом пространстве на сервере. Игрок нажимает клавишу ОГОНЬ, отправляется пакет, временной лаг №1 - пока дойдет команда огонь до управляемого корабля.
Сервер получив команду - "стреляет" кораблем игрока.
Если говорить об энергетическом оружии - то ответ о попадении в другой объект, если он находится в радиусе видимости игрока и в радиусе убойности оружия - приходит сразу. Временной лаг №2.

Если запускается ракета, то сервер создает объект "ракета" и отправляет команду "создать ракету" на стороне клиента. Ракета будет двигаться по той же траектории, что и на сервере, т.к. будет видна игроку. Как только игрок не видит ракету - сервер не посылает данные о положении существующей сейчас ракеты, но ракета продолжает двигаться на стороне сервера, и в конечном счете догоняет противника.
Противник, видит приближение ракеты на радаре, если его радар настроен на прием данных в указанном радиусе. То есть сервер ему уже отправляет данные об изменении траектории ракеты и фактически в клиентском приложении уже создан экземпляр объекта "ракета". Почему это возможно: игрок изменяя радиус дальнобойности своего радара - посылает данные о выбранном масштабе - на сервер, а сервер в свою очередь - проверяет вокруг истинного объекта игрока - наличие других объектов.
Из этого можно сделать вывод - что чем больше объектов в пределах видимости игрока тем больше нагрузка на сервер.
Суммарная нагрузка на сервер тем выше чем дальше друг от друга будут игроки и чем больше будет масштаб выбранный игроками.

Как вариант - запретить игроку изменять масштаб до галактических масштабов. Еще вариант - уменьшать масштаб при увеличении нагрузки на сервер.

На счет плавных движений объектов: допустим у игрока тормозит сеть и появляется задержка 300 мс, за это время игрок думает, что он повернул в сторону от астероида, а через 300мс приходит состояние о том, что он уже врезался в скалу.
Почему вариант с показом игрока "в прошлом" не подходит - дело в том, что игрок и так получает данные "из прошлого", с задержкой 300мс.
Как вариант решения данной проблемы - это ряд мер: определение средней скорости соединения - позволит клиенту отправлять на сервер контрольные пакеты через указанный промежуток времени, и если пакеты пришли позднее/раньше - определить скорость соединения, обновить запись таймаута для текущего игрока на стороне сервера.
То есть если контрольный пакет пришел позднее - снизить тягу корабля пропорционально увеличению временного лага. Тогда игрок у себя в клиенте уворачивается от астероида - на самом деле - он до него даже не долетел еще, но уже уворачивается, но медленно. В итоге - игрока отбрасывает назад в пространстве.

добавлено спустя 8 минут:
ЗЫ у меня прототип не поинт-клик-шутер, а скорее TDS с реальным управлением клавишами. Это в свою очередь влияет на выбор стратегии обработки данных сервером.
Но на мой взгляд ничего не мешает применить тот же алгоритм и для вашей игры.

Последний раз редактировалось: БулерМэн (17:26 27-04-2016), всего редактировалось 3 раз(а)
    Добавлено: 17:19 27-04-2016   
Sh.Tac.
 151 EGP


Рейтинг канала: 5(108)
Репутация: 14
Сообщения: 1426

Зарегистрирован: 27.07.2005
Kann :
причем тут лагокомпенсация?
лагокомпенсация для стрельбы же
чтобы чувак из будущего попадал по чувакам из прошлого
есть простой способ не делать откаты на сервере, собсно я уже написал Улыбка

если клиент к своему синхронизированному времени прибавляет условно пинг, то посылка дойдёт как раз вовремя

Jurec :
много сетевых игр сделал?
ни одна не выжила
Цитата:
если не учитывать сеть в начале
это да, и писать приходится в два раза больше
_________________
This is what you get ...
(c) Radiohead
    Добавлено: 00:28 28-04-2016   
Guest
 2075 EGP


Модератор
Рейтинг канала: 5(167)
Репутация: 376
Сообщения: 27975
Откуда: Моск.
Зарегистрирован: 12.10.2004
Jurec :
Прям вот так все за мультиплеер? Хм.. надо подумать

Ну ви таки
Jurec :
Что думаете? Нужны идеи

Вот ми и.
_________________
Трещит земля как пустой орех
Как щепка трещит броня
    Добавлено: 07:59 28-04-2016   
Kann
 64 EGP


Рейтинг канала: 3(45)
Репутация: 7
Сообщения: 232
Откуда: Москва
Зарегистрирован: 11.04.2008
Sh.Tac. :
Kann :
причем тут лагокомпенсация?
лагокомпенсация для стрельбы же
чтобы чувак из будущего попадал по чувакам из прошлого
есть простой способ не делать откаты на сервере, собсно я уже написал Улыбка

если клиент к своему синхронизированному времени прибавляет условно пинг, то посылка дойдёт как раз вовремя


Стрелять надо на сервере, а не на клиенте, и не каких чуваков из будущего не будет
Клиент должен только нарисовать эффект стрельбы а не физически стрелять.
Тут же поинт-клик, не прямое управление, а значит концепция КС тут не нужна.
Так же как и реальный просчет попаданий физикой, стреляем на сервере, считаем нужный процент попадания в зависимости от хотелок геймдизайнера, или же как в еве, учитывая разные факторы, вроде скорости поворота пушек и т.д
На клиенте рисуем красивый выстрел, и попадание, все, все довольны.
И лагокомпенсация не нужна, делаем аналог сетевого RTS, посылаем не текущие координаты объекта, а команду, например лететь туда куда тыркнул мышкой, считаем время прохода пакетов по сети, делаем задержку на N миллисекунд и одновременно стартуем, на клиенте и сервере, далее раз в N секунд сверяем координаты.
Либо реализуем механизм жесткой синхронизации lockstep, и что бы не трахатся с детерминированными вычислениями, так же раз в N секунд сверяем координаты

Последний раз редактировалось: Kann (10:48 28-04-2016), всего редактировалось 1 раз
    Добавлено: 10:46 28-04-2016   
Cooler
 290 EGP


Ведущий раздела
Репутация: 7
Сообщения: 1668
Откуда: OEG
Зарегистрирован: 24.02.2009
Kann :
попаданий физикой, стреляем на сервере, считаем нужный процент попадания в зависимости от хотелок геймдизайнера


Мсье явно не понимает в чём разница между физическим просчетом и RNG
_________________
Practice makes perfect.

Последний раз редактировалось: Cooler (11:15 28-04-2016), всего редактировалось 1 раз
    Добавлено: 11:08 28-04-2016   
Kann
 64 EGP


Рейтинг канала: 3(45)
Репутация: 7
Сообщения: 232
Откуда: Москва
Зарегистрирован: 11.04.2008
Cooler :
Kann :
попаданий физикой, стреляем на сервере, считаем нужный процент попадания в зависимости от хотелок геймдизайнера


Мсье явно не понимает разницу между физическим просчетом и RNG


Ну да, в поинт клик это особенно нужно, как собаке 5я нога Гы-гы
    Добавлено: 11:10 28-04-2016   
Cooler
 290 EGP


Ведущий раздела
Репутация: 7
Сообщения: 1668
Откуда: OEG
Зарегистрирован: 24.02.2009
Угу. А потом получаем, что линейный крейсер попадает по стоящему на месте (!) истребителю 1 из 20 раз всего лишь потому что дизигнер так захотел.
Kann :
Тут реальные задачи вроде как обсуждают, а не хотелки игроков

Ну-ну. Кто-то тут ранее писал про "должен". В добавок полное игнорирование написанного мной. Удачи.
_________________
Practice makes perfect.

Последний раз редактировалось: Cooler (11:29 28-04-2016), всего редактировалось 1 раз
    Добавлено: 11:17 28-04-2016   
Kann
 64 EGP


Рейтинг канала: 3(45)
Репутация: 7
Сообщения: 232
Откуда: Москва
Зарегистрирован: 11.04.2008
Cooler :
Угу. А потом получаем, что линейный крейсер попадает по стоящему на месте (!) истребителю 1 из 20 раз всего лишь потому что дизигнер так захотел.

Тут реальные задачи вроде как обсуждают, а не хотелки игроков
Хотя если это очередной топик для "мечтателей" тогда да, я оказался не прав, и умываю руки, куда уж мне, с своими советами Гы-гы
    Добавлено: 11:23 28-04-2016   
БулерМэн
 420 EGP


Рейтинг канала: 2(21)
Репутация: 68
Сообщения: 1580
Откуда: Гороховец
Зарегистрирован: 07.02.2006
Cooler :
Удачи.

Kann :
умываю руки

Вы еще подеритесь, горячие финские парни (с) Гы-гы
    Добавлено: 11:57 28-04-2016   
Jurec
 348 EGP


Ведущий раздела
Рейтинг канала: 4(76)
Репутация: 102
Сообщения: 1441 Заблокирован
Откуда: Seattle
Зарегистрирован: 25.02.2006
Kann :
Стрелять надо на сервере, а не на клиенте, и не каких чуваков из будущего не будет
Клиент должен только нарисовать эффект стрельбы а не физически стрелять.

Это адский ад будет. При приличном пинге можно просто клавиатуру засунуть в монитор по самый энтер. Ну серьезно - ты отдаешь команду, а у тебя корабли начинают движение через пинг * 2. Так никто и никогда не делал и не делает - это не играбельно. И еще один момент - я точно не буду делать сервер/клиент. Я буду юзать photon. Где клиенты есть и есть мастер-клиент.


Kann :
Так же как и реальный просчет попаданий физикой, стреляем на сервере, считаем нужный процент попадания в зависимости от хотелок геймдизайнера

Не, спасибо. Это будет совсем другая игра

добавлено спустя 2 минуты:
Kann :
И лагокомпенсация не нужна, делаем аналог сетевого RTS, посылаем не текущие координаты объекта, а команду, например лететь туда куда тыркнул мышкой, считаем время прохода пакетов по сети, делаем задержку на N миллисекунд и одновременно стартуем, на клиенте и сервере, далее раз в N секунд сверяем координаты.
Либо реализуем механизм жесткой синхронизации lockstep, и что бы не трахатся с детерминированными вычислениями, так же раз в N секунд сверяем координаты

Ну ок, вот сверил я - результат разный потому что погрешности float. И?
_________________
MOV topka, C++

Последний раз редактировалось: Jurec (17:22 28-04-2016), всего редактировалось 1 раз
    Добавлено: 17:22 28-04-2016   
Kann
 64 EGP


Рейтинг канала: 3(45)
Репутация: 7
Сообщения: 232
Откуда: Москва
Зарегистрирован: 11.04.2008
Jurec :
Так никто и никогда не делал и не делает - это не играбельно.

У вас что пинг больше 500мс ? кто вообще в такое будет играть с таким пингом ?
а все остальное не существенно, если вы только не участник киберспортивных команд, но там не кто не играет по "интернету"
Ну и близарды другого мнения, как и создатели остальных 100500 стратегий
Чето все играют, и не пыхтят, когда начало движения юнитов запаздывает от момента клика до начала движения.
И будете вы юзать фотон или еще чето, как то не играет роли, я юзаю стандартный Unet, с той же сетевой моделью, и это не сколько не запрещает сделать просчет стрельбы на мастер-клиенте а не у каждого клиента отдельно

Jurec :
Не, спасибо. Это будет совсем другая игра

Ваше дело, если считаете что у вас достаточно сил и средств на реализацию полноценной сетевой физики, то только порадуюсь если что то выйдет.

Jurec :
Ну ок, вот сверил я - результат разный потому что погрешности float. И?

И просто лерпите до исходного состояния синхронизируя с владельцем объекта, накопленная разница крайне мала что бы реально на что то влиять

Последний раз редактировалось: Kann (19:01 28-04-2016), всего редактировалось 1 раз
    Добавлено: 18:57 28-04-2016   
Sh.Tac.
 151 EGP


Рейтинг канала: 5(108)
Репутация: 14
Сообщения: 1426

Зарегистрирован: 27.07.2005
Jurec :
буду юзать photon
я "ниасилил" в своё время Улыбка там ничего нет, просто комната, никакой синхронизации, всё надо делать самому, и даже сериализацию тож лучче свою, потому как "искаропки" тока передача словарей, и по-моему достаточно громоздким способом
_________________
This is what you get ...
(c) Radiohead
    Добавлено: 21:55 28-04-2016   
БулерМэн
 420 EGP


Рейтинг канала: 2(21)
Репутация: 68
Сообщения: 1580
Откуда: Гороховец
Зарегистрирован: 07.02.2006
Jurec :
результат разный потому что погрешности float. И?

и что мешает заменить координаты объекта на те, что получены с сервера?
Ну ладно, для полноты счастья можно вместо замены координат - направлять объект в сторону точных координат с определенной скоростью. Это определенно сгладит рывки, но физика этого будет просто изумительная: объекты будут двигаться по неестественным траекториям, и это будет запутывать еще сильнее чем рывки.

добавлено спустя 6 минут:
По крайней мере рывки будут говорить о малом лаге для самого игрока, и он сможет как-то подстроится под ситуацию, в отличии от ситуации, когда этого лага не видно.

Есть еще пример, как реализовано в одной онлайн-игре: при очень большом лаге - на клиенте пропадают другие игроки и динамические объекты. То есть игрок как будто бы выпал в вакуум. Статика вроде бы есть, локация прописанная в клиенте никак не изменилась, он сам двигается куда хочет, но враги пропали с радаров. А это значит, что связь с сервером временно потеряна и тебя как юнит скорее всего уже подстрелили, и это воспринимается нормально.

Последний раз редактировалось: БулерМэн (22:26 28-04-2016), всего редактировалось 1 раз
    Добавлено: 22:26 28-04-2016   
Канал Игры Мечты: «Solarwind»
На страницу: Пред.  1, 2 | Все страницы
  
Показать: 
Предыдущая тема | Следующая тема |
К списку каналов | Наверх страницы
Цитата не в тему: Какой-такой док для НЛО? Может, вам еще спальню йети показать?!

  » Solarwind | страница 2
Каналы: Новости | Elite | Elite: Dangerous | Freelancer | Star Citizen | X-Tension/X-BTF | X2: The Threat | X3: Reunion | X3: Terran Conflict | X Rebirth | X4: Foundations | EVE Online | Orbiter | Kerbal Space Program | Evochron | VoidExpanse | Космические Миры | Онлайновые игры | Другие игры | Цифровая дистрибуция | play.elite-games.ru | ЗВ 2: Гражданская война | Творчество | Железо | Игра Мечты | Сайт
   Дизайн Elite Games V5 beta.18