Реализация сетевой игры
|
|
tjslash | Дата: Понедельник, 11 Мая 2009, 12:29 | Сообщение # 1 |
Продвинутый
Группа: Участники
Сообщений: 132
Награды: 0
Замечания: 0%
Статус:
Профессия: студент
Команда: Йа один((
Проектов: "Blood Life"
| Использую физический движок Newton. Сетевое взаимодействие осуществляется через DirectPlay. Начало хорошее. Две машины могут гонять по полю. Но проблема состоит в том, что я не могу понять алгоритм созданиия взаимодействия ФИЗМОДЕЛЕЙ двух машин.
Сообщение отредактировал tjslash - Понедельник, 11 Мая 2009, 12:37 |
|
| |
tjslash | Дата: Понедельник, 11 Мая 2009, 12:56 | Сообщение # 2 |
Продвинутый
Группа: Участники
Сообщений: 132
Награды: 0
Замечания: 0%
Статус:
Профессия: студент
Команда: Йа один((
Проектов: "Blood Life"
| Jack, так, это уже интересней. А как можно определить кто есть кто? Т.е. кто сервер, а кто клиент? (использую Direct Play)
|
|
| |
falc0n | Дата: Понедельник, 11 Мая 2009, 23:25 | Сообщение # 3 |
Продвинутый
Группа: Участники
Сообщений: 149
Награды: 0
Замечания: 0%
Статус:
Профессия: Студент
Команда: MINFOS studio(в команде я один xD )
Проектов: один(зубодробительная ММОРПГ)
| в блице с сетью работал но не с Dx play вообще по любому вся физика считается на сервере (в дхп не помню как там создается...HostNetGame что ли... не буду врать) так вот и определяешь... создает игру полюбому 1 человек - от он и сервер. на него идет минимум инфы - сервер в свою очередь считает физику (проще говоря раставляет обьекты на прешедшии координаты, считает колизии и т.п.) и шлет обратно положение игроков. можно даже попробовать обойтись в клиенте без самого ньютона (координаты с сервера приходят с уже расчитанной физикой) правда это все будет большой геморой... физика = либо много данных либо много хитрожопостей ) (хотя в сетевой игре второе почти всегда уместно)
|
|
| |
tjslash | Дата: Вторник, 12 Мая 2009, 10:08 | Сообщение # 4 |
Продвинутый
Группа: Участники
Сообщений: 132
Награды: 0
Замечания: 0%
Статус:
Профессия: студент
Команда: Йа один((
Проектов: "Blood Life"
| falc0n, вот я так и пытаюсь сейчас сделать, что физика просчитывается только на сервере... Но что-то я туплю немного... Смотри, мы от сервера пересылаем координаты 1 машинки и 2 машинки (x, y, z, pitch, yaw, roll). А от клиента нам нужно только управление, как я понимаю, пересылать? Т.е. нажата ли клавиша up, down, right или left. Так?
|
|
| |
tjslash | Дата: Вторник, 12 Мая 2009, 10:09 | Сообщение # 5 |
Продвинутый
Группа: Участники
Сообщений: 132
Награды: 0
Замечания: 0%
Статус:
Профессия: студент
Команда: Йа один((
Проектов: "Blood Life"
| Jack, DirectPlay
|
|
| |
tjslash | Дата: Четверг, 14 Мая 2009, 12:31 | Сообщение # 6 |
Продвинутый
Группа: Участники
Сообщений: 132
Награды: 0
Замечания: 0%
Статус:
Профессия: студент
Команда: Йа один((
Проектов: "Blood Life"
| У кого-нибудь была такая проблема с Newton'ом? В общем, написал код сетевого взаимодействия. Физика просчитывается на сервере и передает клиенту положения двух, своей и клиента, машинки. Клиент же передает серверу данные о нажатии клавиш вперед, назад, влево, вправо. Все вроде как правильно. На клиенте создается машинка. Физика норм. Но если мы подключаем клиента, то появляется ошибка в функции phWorldStep(dtime#) Может кто-нибудь сталкивался с данной проблемой и сможет посоветовать мне что-нибудь? Заранее благодарен))
|
|
| |
falc0n | Дата: Четверг, 14 Мая 2009, 14:04 | Сообщение # 7 |
Продвинутый
Группа: Участники
Сообщений: 149
Награды: 0
Замечания: 0%
Статус:
Профессия: Студент
Команда: MINFOS studio(в команде я один xD )
Проектов: один(зубодробительная ММОРПГ)
| не работал ваще с ньютоном... я б ваще еще вот что попробовал... передвижение тачек доверить клиенту и периодически отправлять ан сервервер координаты сервер сравнивает их с предыдущими твоими координатами (и скоростью на всякий) и если не находит ОГРОМНЫХ отлчий то продолжает рабботать в обычном режиме таким образом мы можем разгрузить слегка серверную часть... (проверка нужна дабы ни у кого не было возможности хакнуть игрушку) хотя хз....
|
|
| |
tjslash | Дата: Воскресенье, 17 Мая 2009, 12:48 | Сообщение # 8 |
Продвинутый
Группа: Участники
Сообщений: 132
Награды: 0
Замечания: 0%
Статус:
Профессия: студент
Команда: Йа один((
Проектов: "Blood Life"
| wodonagrev, это ты о чем?
|
|
| |
Amadey | Дата: Воскресенье, 17 Мая 2009, 20:39 | Сообщение # 9 |
Продвинутый
Группа: Участники
Сообщений: 127
Награды: 0
Замечания: 20%
Статус:
| Ты на сервер отправляешь не только координаты, но и его действия. Если только в данном случае машины - то и координатами можно обойтись (плюс углы поворота), а если это бегающий бот, то помимо координат - еще и действия. Всю физику считать на сервере - БРЕД полнейший, да и еще к тому что ты пишешь на БЛИЦе. Ну 1-2 клиента еще да, а если их 10-20 ? Брееед.. Я бы вообще без сервера делал бы по протоколу UDP если в локалке, да и быстрее в несколько раз получилось бы, а то уже мне кажется бредово хвастаться друзьям "А я тут сервер сделал" а друзья "ОоОоО... Вааааххх!". Лучше сделай качественно.
|
|
| |
tjslash | Дата: Понедельник, 18 Мая 2009, 21:49 | Сообщение # 10 |
Продвинутый
Группа: Участники
Сообщений: 132
Награды: 0
Замечания: 0%
Статус:
Профессия: студент
Команда: Йа один((
Проектов: "Blood Life"
| Amadey, я и хочу качественно... просто маленько не догоняю как считать физику... Можно подробнее, как через UDP? Надо же все равно где-то обрабатывать всю физику... А на разных ПК ну никак...
|
|
| |
falc0n | Дата: Вторник, 19 Мая 2009, 13:33 | Сообщение # 11 |
Продвинутый
Группа: Участники
Сообщений: 149
Награды: 0
Замечания: 0%
Статус:
Профессия: Студент
Команда: MINFOS studio(в команде я один xD )
Проектов: один(зубодробительная ММОРПГ)
| tjslash, молодец Amadey, вот будь добр ... что ты имел ввиду под "считать физику на сервере бред" м? да уж.. с трудом себе представляю ПОЛНЫЙ расчет физики в клиентах а нейтральные обьекты как должны обрабатываться?... мол "задел ящик" я начит и физику считаю я? )) не слишком ли доверительно? а если я каким нить софтом в пакетике изменю координаты свои.. или ящика... великолепно... буду сыпать перед клиентами тонны ящиков что бы те не могли проехать.... хотя х☼р его знает... я не знаток.. tjslash сделай не большией семплы с кубиками (и физикой) на разных протоколах, и разной систематикой.. так и првоериш что "лучше"... к пакетам можно прикрутить лишнюю избыточную инфу дабы проверять скорость (в кубиках достаточно передавать ХУЗpitch yaw roll но в игре параметров может окахываться больше поэтому и следует что нить прикрутить) о результатах расскажэшь )
|
|
| |
Amadey | Дата: Вторник, 19 Мая 2009, 16:22 | Сообщение # 12 |
Продвинутый
Группа: Участники
Сообщений: 127
Награды: 0
Замечания: 20%
Статус:
| Ну ты представь сервер, который считает физику одновременно 20 едущих машин, или 20 падающих бочек. Сервер каждый раз будет опрашивать все порты клиентов, и для каждого считать физику? Вы чего с ума сошли? Открыто 20 портов (20 клиентов) и для каждого порта необходимо еще посчитать физику 20 бочек. Для этого надо отправить 400 пакетов координат для каждого клиента, + обработать 400 пакетов входящих от клиента (что мол, на, обработай). Итого 800 пакетов. ПАКЕТОВ! А НЕ БАЙТ, ИЛИ каких либо данных. А вы все знаете, что передать можно данные с огромной скорость, а сконектится с ним не такая уж скорость и большая, т.е. если передавать по (скажем) 2 байта 1000 пакетов, это гораздо медленней чем передать 2 пакета с 1000байтам. Делайте выводы. UDP - Данные посылаются дейтаграммами. В нем нет как такового системы сервер-клиент, используется схема peer-to-peer. За счет того что протокол не гарантирует 100% доставки дейтаграммы, достигается неимоверная скорость доставки сообщения (Это быстрее нежели TCP) Посмотри в блице команду CreateUDPStream(). Указываешь в качестве параметра порт, затем шлешь сообщения на другой порт, который тоже с помощью CreateUDPStream() открыт на другом компе. Смотри статью о UDP, которую писал на этом форуме ASoftware. Это там где-то в первых темах. Там примеры и т.д. и т.п. P.S. falcon не забывай что ты блиц используешь, а всю тяжесть блицевскую скинешь на какой-то один комп. Я понимаю, что можно использовать и дополнительные dll, но все таки, новички в этом деле еще не делали ничего сверхбыстрого. Нельзя прыгнут выше себя. Лучше считать физику на клиентах, каждый пусть кто дотронется до той же бочки пусть и считает, а остальным отправляет ее координаты и углы, остальные примут эту лабудень, и всем будет хорошо. И вот сами подумайте, неужели не понятно, что лучше разбить работу на несколько компов (скажем на десяток клиентских компов), чем на один бедный сервер? Тем более что если клиенты ее будуть считать, работа будет выполнятся паралельно, а если сервер один, то последовательно. И что ты имел ввиду под фразой "не слишком уж доверительно?" Сервер что ему, сверхсекретную информацию доверяет?
Сообщение отредактировал Amadey - Вторник, 19 Мая 2009, 16:30 |
|
| |
falc0n | Дата: Вторник, 19 Мая 2009, 17:06 | Сообщение # 13 |
Продвинутый
Группа: Участники
Сообщений: 149
Награды: 0
Замечания: 0%
Статус:
Профессия: Студент
Команда: MINFOS studio(в команде я один xD )
Проектов: один(зубодробительная ММОРПГ)
| Amadey, да йа как бэ понимаю что было бы гуд сервер разгрузить но подсчет физики можно все равно приравнять к подсчету координации.. а этого делать не стоит. т.к. если уж делать то делать грамотно ... грамотный программист не даст онлайн игроку шанса воспользоваться такими... брешами в пакетах... иначе одна из тачек вдруг нестого не ссего рано или поздно начнет летать с бешеной скоростью по треку (угар... копейка на сверхзвуковой)... тяжеть и рассудительность блица лучше не обсуждать... никапли сомнения в твоей правоте. а вот насчет кол-ва подсчетов ты уж извини... я в свое время в РО играл (ммо .. рагнарок онлайн) там база шмоток... даже для одного класса(предположим - связаный список) таких гиганских размеров...да + еще и все координаты,состояние игрока его шмот... ну думаю нет резона рассказывать тебе сколько там инфы. и я бы не сказал что сталкивался с "тормознутостью".. конечно там и каналы у сервера потолще но я и на своем 128кбс выдерживал много народу без лагов. а тут ... физика 3-4ех машин... думаю сервер справиться без особого напряга... мыже не софт боди вкладываем. к тому же.. мы на сервер передаем нажатия... обрабатывается физика не для каждого клиента а сразу в общем. ... как обычной игре есть боты и ты. если упадет ящик то он падает одинакого для тебя и для бота вот а если предположить что ты и бот - удалены. то весь мир считается так же.. только обратно отправляет пакет с координатами
|
|
| |