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

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

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

Ответ
 
Опции темы
Старый 08.11.2009, 20:25   #1
Данил
Модератор
 
Аватар для Данил
 
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений
(для 1,694 пользователей)
Сеть в играх.

Стало интересна сфера игр многопользовательских.

сделал простейший пример -
есть сервер, есть клиент.
Разница между ними только та, что сервер - основная программа, а клиент - подключается к серверу.

Суть программы - это то, что имеется два объекта. Одним управляет игрок за сервером, другим - игрок за клиентом.

Как работает программа -
Объект сервера имеет переменные - Х, У, Скорость, Поворот.
И объект клиента имеет точно такие же переменные.

На сервере мы управляем одним объектом, затем посылаем клиенту Х,У,поворот нашего объекта.
Клиент их принимает, и рисует в нужной области с нужным поворотом объект, затем управляет своим объектом, и те же данные посылает серверу. Сервер же так же рисует.

Т.е. такая система -одним управляем, второй тупо рисуем по полученным данным.

Отправка и прием идет каждым циклом. отправляется, как я понял, за цикл - 8 байтов.

На деле же эта система передачи - наитупейшая.

Как вообще реализуется передача данных? Как правильно делаются игры многопользовательские?

Возьмем шутер.
Играет, допустим, два человека.
На одном компе высчитывается вся логика, второй тупо прниимает эти данные? или же делятся задачи пополам?
Допустим, как работают пули? выстрелил я - пуля по расчетам летит. Кажыдй цикл данные о пули передаются? или как? Или просто передали то, что чел такой-то выстрелил, , а у всех уже идет логика пули сама, и не надо уже больше ничего передавать?
а как в гонках все работает? как в стратегиях?

Кто знает, можете рассказать о всей этой работе в играх. А то сам пока точно понять не могу.
Как мне кажется ,система эта очень гибкая, и идеального решения нет.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Nex (09.11.2009)
Старый 08.11.2009, 20:34   #2
jimon
 
Сообщений: n/a
Ответ: Сеть в играх.

Данил
в шутерах есть сервер и клиент, они всегда разделены (когда чел на одном компе стартует игру то стартует и клиент и сервер), на сервере и клиенте есть игровое время, сервер опережает клиентов по времени, когда клиент двигается то он отправляет на сервер клавиши (грубо говоря), но у себя уже начинает движение, сервер анализирует клавиши, проводит симуляцию и всем отправляет состояние этого клиента, клиент принимает свое состояние и проводит коррекцию, движение других клиентов он интерполирует, зачастую на нужный момент времени клиент не может узнать куда движутся другие игроки на экране, потому используется метод предсказания куда они будут двигаться, а потом коррекция с реальными данными

при выстреле клиент передает данные на сервер, сервер отматывает время до того момента когда ты стрелял и смотрит попал ли ты или нет, клиент в это время уже играет анимацию смерти и тд, потом сервер передаёт всем результаты

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

а как в гонках даже не знаю

ps. всё это очень и очень сложно, за две ночи не напишешь, тут месяц надо убить чтобы достичь приемлемого качества
 
Ответить с цитированием
Эти 4 пользователя(ей) сказали Спасибо за это полезное сообщение:
DeadElf (29.11.2009), Nex (09.11.2009), St_AnGer (23.04.2011), Данил (08.11.2009)
Старый 08.11.2009, 21:10   #3
Tadeus
Троллота
 
Регистрация: 09.07.2007
Сообщений: 1,829
Написано 554 полезных сообщений
(для 1,772 пользователей)
Ответ: Сеть в играх.

GoodWin давал когда-то ссылочку:
http://www.hl-inside.ru/articles/mul...er-networking/
(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо Tadeus за это полезное сообщение:
DeadElf (29.11.2009), Nex (09.11.2009), Данил (08.11.2009)
Старый 09.11.2009, 07:51   #4
Nex
Гигант индустрии
 
Аватар для Nex
 
Регистрация: 13.09.2008
Сообщений: 2,893
Написано 1,185 полезных сообщений
(для 3,298 пользователей)
Ответ: Сеть в играх.

Мне вот тоже интересно, как делать "нормальную" сеть между клиентами и сервером и создание нормального ИИ хотя бы как в примитивной стрелялке (что бы стены обруливали и выле себя хотя бы, как "тупой" игрок ) ...
(Offline)
 
Ответить с цитированием
Старый 09.11.2009, 21:49   #5
Данил
Модератор
 
Аватар для Данил
 
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений
(для 1,694 пользователей)
Ответ: Сеть в играх.

Попробовал сделать сеть.
Все просто - клиент, сервер.
Просто летаем на кубиках.
На неограниченное количество человек.

Ни-хре-на. Не получилось. А как тут передать информацию о том, что мы подключились, если в сервере уже указано ,что считывать? Посылать серверу команду о том, что считать?
И плюс еще вечная проблема со временем - тут ведь не моментально делается, если я сразу же отправлю данные, и сразу же начну принимать - не пойдет, ибо сервер не успеет обработать вдруг.
А как клиенту понять, когда он считывает данные, какие данные для какого объекта? Поименовывать? лишняя нагрузка, плюс в разы больше циклов... Короче, мозги уже кипят. А ведь это только начало того, что делали в шутерах.
Не мой уровень, не дорос я еще до сети.
Да, смогу сделать простейший обмен информацией. Но не игры. Нет... ну его...
(Offline)
 
Ответить с цитированием
Старый 10.11.2009, 03:16   #6
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Сеть в играх.

Сервер должен иметь много частей. Такие как:
- Менеджер пользователей.
- Менеджер объектов.
Разные оптимизации, отвечающие за выбор участка информации, которую нужно передавать, и т.п.
В менеджере пользователей, задача сервера, это управлять пользователями, и держать их "в курсе дела".
Естественно каждый клиент имеет ID.
Также и объекты в мире - каждый объект имеет ID - и он должен быть везде одинаковым.
Таким образом не сложно уже применять какие-то действия.
Пока лучше забыть о физике - там уж слишком всё сложно.
Но перемещение, реализовать не так и сложно.
Кстати посылка пакетов не каждый цикл, этого будет слишком много, тем более за продолжительность цикла, пакет даже не успеет дойти (средняя продолжительность цикла составляет 1000мс/60упс=19мс.)
Тут подход должен быть с аналитической стороны, с листками бумаги, и карандашом, чтобы это всё уложить в голове
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Данил (10.11.2009)
Старый 10.11.2009, 03:22   #7
jimon
 
Сообщений: n/a
Ответ: Сеть в играх.

MoKa
Но перемещение, реализовать не так и сложно.
ну-ну при пингах больше 500 мс начинаются танцы с бубном, а любительская система и 50-100 мс не выдержит
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо за это полезное сообщение:
impersonalis (13.11.2009), is.SarCasm (17.12.2009), tormoz (10.11.2009)
Старый 10.11.2009, 03:26   #8
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Сеть в играх.

jimon, дык, а где ты видел играбельный реалтайм с 500мс. Если такой пинг, то обычно в играх, на серверах стоят лимиты, которые тебя просто автоматически диссконектят.
Систему можно подгонять, и варьировать. Я перемещение по TCP/IP (лондон<>питер), реализовывал в 120пинга, а это примерно максимум, выше уже начинаются лаги, но ниже этого - играбельно в любую современную игру.
(Offline)
 
Ответить с цитированием
Старый 10.11.2009, 22:17   #9
Данил
Модератор
 
Аватар для Данил
 
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений
(для 1,694 пользователей)
Ответ: Сеть в играх.

На счет пингов пока даже и не задумывался, у меня передача / отправка идет каждым циклом. Хотя, думаю, может поставтиь тупо таймер на сервере и все?

Немного стал понимать все же всю архитектуру, уже как минимум сделал регистрацию клиентов на сервере...
(Offline)
 
Ответить с цитированием
Старый 12.11.2009, 22:10   #10
Ky3R_94
Нуждающийся
 
Аватар для Ky3R_94
 
Регистрация: 29.08.2009
Адрес: Україна, Донецьк
Сообщений: 71
Написано 13 полезных сообщений
(для 45 пользователей)
Ответ: Сеть в играх.

я делал всё сложней наверно - с компа клиента кидал инфу на сервак, с сервака - всем клиентам инфу о других клиентах. ну и ещё проверка была, что всем всё дошло. не дошло, тогда ждемсс. и в то время как бы нельзя двигаться. поищу исходник. коль не найду то попытаюсь собрать опять
__________________
PC: AMD Phenom x4, 4096 MB RAM, Nvidia GeForce 9600GT, Windows Vista
(Offline)
 
Ответить с цитированием
Старый 12.11.2009, 22:38   #11
Tormaz
Нуждающийся
 
Регистрация: 23.10.2009
Сообщений: 74
Написано 9 полезных сообщений
(для 22 пользователей)
Ответ: Сеть в играх.

Сообщение от Данил Посмотреть сообщение
Хотя, думаю, может поставтиь тупо таймер на сервере и все?
Это вовсе не тупо , а просто необходимо. И каждый пакет да и состояние сервера (кадр) желательно нумеровать к примеру от одного до тридцати( по количеству тиков в секунду которые тебе надо выбрать) так гораздо легче понять устаревший это кадр или нет , это если ты конечно динамичную игру делаешь . Сервер контры к примеру сохраняет данные кадры на сервере и сранивает твои действия в соответствии с твоим временем те номером твоего кадра, как правильно заметил jimon.
Поэтому если на сервере есть "лагер" то ты можешь от него за угол упрыгать а сервер тебе пришлет пакетик нееет дружок ты убит и вытащит твой трупик назад назад так сказать в прошлое изза тормоза ..
Вот тебе ссылочка http://developer.valvesoftware.com/w..._Networking:ru
Это пример так сказать одного из самых требовательных шутеров где точность достигается пожиранием ресурсов проца и сети на стороне сервера.
А коли ты ммо задумал делать то там и требования немного другие там немного попроще все поскольку при таком количестве клиентов и точности контры никакого кластера не хватит. Почитай по ссылке а я потом еще отпишусь , уж очень я люблю на эту тему поболтать
Перед разработкой ммо ты должен решить для начала какие задачи ты отдашь клиенту (вопрос безопасности и читерства) а какие будешь решать на сервере (вопрос загруженноси сервера )
К примеру контроль передвижения , контроль попадания, контроль урона, короче говоря каждое предполагаемое тобой действие в игре. Каким образом будет происходить перемещение игрока, т.е. насколько оно свободно ?
Реши сколько раз ты будешь синхронизировать состояние сервера и клиента в секунду. Короче говоря все не так уж и сложно.

Кстати а в контру здесь народ играет ?
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Данил (12.11.2009)
Старый 12.11.2009, 23:12   #12
Данил
Модератор
 
Аватар для Данил
 
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений
(для 1,694 пользователей)
Ответ: Сеть в играх.

Мда, как же все сложно на самом деле.
В сурсе, как я понимаю ,своя архитектура? А в любой другой игре может быт все построено иначе? Или эта архитектура сети - идеал просто?

Я же все проще хотел сделать.
Чтобы сервер не проводил кучу расчетов, а просто был ... хм... проргаммой, которая связывала бы игроков
Т.е. в моем случае я думал сделать , чтобы, допустим ,каждые 50 миллисекунд клиент получал позиции объектов ( допустим, ближайших объектов). В пакете, допустим ,входили такие данные, как позиция объекта, поворот объекта, и команды объекта. Т.е. как - чтобы клиент ставил объект в нужном месте в нужном повороте, а потом просто эти 50 миллисекунд двигал объект по командам, команды в данном случае - то ,что нажимал другой клиент.

Но ,как понимаю, моя система - идиотизм?
(Offline)
 
Ответить с цитированием
Старый 12.11.2009, 23:49   #13
jimon
 
Сообщений: n/a
Ответ: Сеть в играх.

Данил
по твоей схеме не добиться ощущения присутствия
 
Ответить с цитированием
Старый 13.11.2009, 00:36   #14
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Сеть в играх.

уорниг метаморфирование ника детектед!
Tormaz
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо impersonalis за это полезное сообщение:
Arles (13.11.2009), Tormaz (13.11.2009)
Старый 13.11.2009, 00:48   #15
NitE
злобный флудер
 
Регистрация: 10.07.2007
Сообщений: 2,585
Написано 789 полезных сообщений
(для 1,476 пользователей)
Ответ: Сеть в играх.

impersonalis, баян...
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо NitE за это полезное сообщение:
Arles (13.11.2009), Tormaz (13.11.2009)
Ответ


Опции темы

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сеть dector Стихотворения 5 05.01.2008 19:28
Музыка в играх Данил Болтовня 13 30.10.2007 13:24
Реализация сетевых механизмов в играх и Blitz Armageddon 3D-программирование 1 08.01.2007 16:26
Вывести Текст В чужих Играх AVin C++ 18 13.02.2006 22:55


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


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