Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Сетевые игры\сеть для игры. [Delphi, Windows]


Страницы:   1 2 3

Galiaf ©   (2006-06-07 05:26:00) 

Привет. Кто делал сетевые игры, нужно узнать, что лучше использовать для динамических игр. Какой компонент лучше использовать? Сеть в игре ещё не делал но уже некоторую часть продумал, осталось только узнать с каким компонентом работать. ServerSocket & ClientSocket знаю немного(не думаю что это лучший вариант), возможно tspclient\server или winsock без компонентов. UDP отпадает, насколько я знаю дейтаграммы не надёжны хотя и легче. Других компонентов нет но может быть у вас есть идеи.


XProger   (2006-06-18 15:20:00) [21]

Galiaf,
ID := PLAYER_POS; // пакет будет содержать позицию игрока
NET_Write(ID, SizeOf(ID)); // пишем идентификатор пакета
NET_Write(Player.Pos, SizeOf(Player.Pos)); // пишем позицию игрока типа TVector
NET_Send(nil, 21666, false); // послали широковещательный пакет (на всю локалку)
...
buf : array [0..1024] of Byte;

while NET_Recv(@buf, 255, IP, Port, recv) > 0 do
begin
 Move(buf, ID, SizeOf(ID); // получаем тип данных в пакете
 case ID of
   PLAYER_POS : Move(buf[SizeOf(ID)], Player.Pos, SizeOf(Player.Pos));
   ..
 end;
end;

Работаем с памятью :)


Galiaf   (2006-06-18 10:06:00) [22]


> XProger ©   (16.06.06 00:04) [22]

Благодарю. Вот только зачем было ссылку через яндекс давать, тем более с явным запросом на свою страницу  :), я бы в яндексе подобное не писал.
Ещё одна проблема с теорией я думаю: в игре будут разные пакеты, как узнавать с чаем именно пакет пришёл? Я раньше только текст посылал и вставлял в начало символы для определения типа пакета но это уже другое, можно я думаю смотреть по размеру пакета.
И вот ещё вопрос по неопытности: например я хочу послать vector

NET_Write(vector, sizeof(vector));
NET_Send(nil, 21666, false);

я думаюю так но вот как такое принять там ведь array [0..255] of Char на сколько я помню приходит. Или мне перед посылкой переводить в такой вид а  после принятия обратно переводить? Но это уже не правильно будет я думаю. Одним словом - ЗАПУТАЛСЯ.


megabyte-ceercop   (2006-06-16 07:15:00) [23]

Локально я игровой протокол просто отлаживал. Отписываюсь от темы. : )


XProger   (2006-06-16 00:04:00) [24]

Galiaf http://www.yandex.ru/yandsearch?text=%C1%E8%E1%EB%E8%EE%F2%E5%EA%E0+%E3%EE%F2%EE%E2%EE%E3%EE+%F1%E5%F2%E5%E2%EE%E3%EE+%EF%F0%EE%F2%EE%EA%EE%EB%E0&stype=www

megabyte-ceercop
Всё ты верно делаешь, но тестирование скорости отправки (заведомо не теряющихся) пакетов на локальной машине - даст результаты для игры на локальной машине ;) А мы вроде про сетевую игру говорим...


megabyte-ceercop   (2006-06-14 07:02:00) [25]


> RzCoDer ©   (08.06.06 13:59) [10]
>
> > megabyte-ceercop
>
> А зачем тебе скорость передачи данных через сетевые компоненты
> на одном компе?
> <Цитата>
>
>
> XProger ©   (08.06.06 15:48) [11]
> RzCoDer, может он таким образом взаимодействие между двумя
> программами делает ;)


Повторю балин:


>  тесты я делал на одном компе


Тестирую сетевую игру (запускаю сервер и клиент) на одном компе, и только после уладки крупной партии багов - на двух удаленных.


Galiaf   (2006-06-14 03:17:00) [26]

У тебя случайно примерчика работы с UDP не найдётся? По яндексу почти нет (то что я нашёл - это не точные рабочие примеры, а предположения...)


XProger   (2006-06-12 05:37:00) [27]

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


Galiaf   (2006-06-12 00:01:00) [28]

Вот непонятно ещё: в indy есть UDP и сервер и клиент, это ж как понимать? Я думал, что он без таких иерархий работает, а просто отсылает куда ему скажут, на закладке internet только один компонент UDP.


Galiaf   (2006-06-10 00:44:00) [29]

И ещё, как часто отсылать пакеты? И делать это в таймере или в других событиях (в каденсере например :))?


Galiaf   (2006-06-09 21:41:00) [30]

Я так подумал, может я не правильно представляю себе сеть. Я собирался передавать с клиента на сервер состояния клавишь, а передвижения обрабатывать  на сервере, после отсылать на клиент положение игроков и информацию, например, о взрыве или уничтожении объекта. Как делать будет правильней?


Galiaf   (2006-06-09 11:49:00) [31]

Да и у меня кстати не супер-пупер шутер, бомбермен, только трёхмерный, и нет никаких примеров программ на UDP, чтобы изучить. Я ещё неточно вижу работу с сетью но думаю по ходу изучения компонентов пойму что к чему. Вот ещё уточнить: Чем отличается Indy от компонентов с закладки Internet и собственно что не стоит использовать?


tButton   (2006-06-09 05:51:00) [32]

ну ладно =)
но я пока ничего столь динамичного, чтобы не хватало TCP ещё не делал =)


XProger   (2006-06-09 05:25:00) [33]

UDP оранизован так, что сливает пакеты сразу. Нужно очень постараться, чтобы забить очередь пакетов ;)


tButton   (2006-06-09 04:56:00) [34]


> в TCP - очередь стоит пока тот пакет не долетит успешно
> :)

а в УДП очередь что делает?
я так понимаю, что если пользователей несколько то пакет должен прийти всем и сразу...
и вот тут я realize, что понимаю всё меньше и меньше... =))))


XProger   (2006-06-08 15:48:00) [35]

RzCoDer, может он таким образом взаимодействие между двумя программами делает ;)

tButton. ты основного фокуса не понял. Гарантированная доставка реализуется и на UDP без проблем, но "благодаря" гарантированному порядку в TCP - очередь стоит пока тот пакет не долетит успешно :)


RzCoDer   (2006-06-08 13:59:00) [36]


> megabyte-ceercop

А зачем тебе скорость передачи данных через сетевые компоненты на одном компе?


megabyte-ceercop   (2006-06-08 12:20:00) [37]

...на том же самом компе.

По идее УДП должен быть быстрее.


megabyte-ceercop   (2006-06-08 12:18:00) [38]

> ессесно

.
Всмысле TCP_локально_на_компебыстрее чем UDP_локально_на компе.


tButton   (2006-06-08 07:59:00) [39]


> А возможно ли что ТСР работает быстрее, потому, что тесты
> я делал на одном компе и пакеты за пределы компа не уходили?

ессесно =)


megabyte-ceercop   (2006-06-08 07:41:00) [40]

А у меня так протокол задуман, что в случае если даже пакеты будут через один теряться, клиент сам расчитает движения объектов как надо и при первой же возможности синхронизируется с сервером.
Надо сейчас посидеть с UDP, поразбираться.

А возможно ли что ТСР работает быстрее, потому, что тесты я делал на одном компе и пакеты за пределы компа не уходили?


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо