![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сетевые игры\сеть для игры. [Delphi, Windows]
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, поразбираться.
А возможно ли что ТСР работает быстрее, потому, что тесты я делал на одном компе и пакеты за пределы компа не уходили?