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

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

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

2D-программирование Вопросы, касающиеся двумерного программирования

Ответ
 
Опции темы
Старый 26.03.2009, 15:48   #1
butcher
Оператор ЭВМ
 
Регистрация: 17.04.2007
Сообщений: 31
Написано 0 полезных сообщений
(для 0 пользователей)
Онлайн (Клиент <-> Сервер)

Решил сделать мини онлайн игру... - да бы получить опыт, работы с потоками...
Вопрос:
Что лучше выбрать для этого (TCP, UPD)?
- если UPD? - то есть, какой-нить пример тип Клиент <-> Сервер?
(Offline)
 
Ответить с цитированием
Старый 26.03.2009, 20:47   #2
HAMANN
Нуждающийся
 
Аватар для HAMANN
 
Регистрация: 05.08.2008
Сообщений: 73
Написано 11 полезных сообщений
(для 24 пользователей)
Ответ: Онлайн (Клиент <-> Сервер)

юзай TCP Если мини онлайн игра)))) а пример в хелпе не плохой)
(Offline)
 
Ответить с цитированием
Старый 26.03.2009, 21:10   #3
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,355
Написано 2,471 полезных сообщений
(для 6,852 пользователей)
Ответ: Онлайн (Клиент <-> Сервер)

UDP - cверхбыстрый, но сохранность данных не гарантируется.
TCP - более медленный, но с проверкой и данных.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
(Offline)
 
Ответить с цитированием
Старый 26.03.2009, 21:58   #4
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Онлайн (Клиент <-> Сервер)

Однозначно TCP.
(Offline)
 
Ответить с цитированием
Старый 27.03.2009, 00:05   #5
butcher
Оператор ЭВМ
 
Регистрация: 17.04.2007
Сообщений: 31
Написано 0 полезных сообщений
(для 0 пользователей)
Re: Онлайн (Клиент <-> Сервер)

"юзай TCP Если мини онлайн игра))))" - тобишь для норм онлайн рпг протокол не подойдет?
(Offline)
 
Ответить с цитированием
Старый 27.03.2009, 00:12   #6
jimon
 
Сообщений: n/a
Ответ: Онлайн (Клиент <-> Сервер)

butcher
если ты не знаешь что выбрать, то ты игру всё равно не сделаешь, какая разница тогда что использовать ?
и на том и на том можно сделать нормальную игру, просто грабли будут разные
но основные грабли которые убивают почти любой онлайн проект - синхронизация игрового времени
игровые события доставляются с задержками порядка 200-500 мс, а юзеру уже надо показывать что-то
 
Ответить с цитированием
Старый 27.03.2009, 03:23   #7
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Онлайн (Клиент <-> Сервер)

jimon, ну ты загнул 200-500, это с модемом чтоли, если это фпс, то туда-сюда, (ping) если выше 120, то уже не играбельно, при этом что щас уже почти любой имеет интернет с нормальной скоростью, и пинги ниже 100. Я предпочетаю вообще ниже 40, чтобы нормально играть в FPS.
(Offline)
 
Ответить с цитированием
Старый 27.03.2009, 06:19   #8
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Онлайн (Клиент <-> Сервер)

Ну я вот для мобилы всё собираюсь написать какую-нибудь онлайн игру. А там скорость интернета, извините за выражение, гавно Вот как мне чувак сервер напишет на C++, тогда буду думать что написать. Но скорее всего сделаю что-то пошаговое и несложное. =)
(Offline)
 
Ответить с цитированием
Старый 27.03.2009, 09:05   #9
jimon
 
Сообщений: n/a
Ответ: Онлайн (Клиент <-> Сервер)

MoKa
дык, не всё же так просто - имеем игрок_1, игрок_2, сервер
между игрок_1 и сервером пинг A, между игрок_2 и сервером пинг B,сервер может отправлять пакеты с задержкой C (время между приемом и отправкой - тоесть обработка)

игрок_1 посылает данные в на сервер при этом клиент игрока_1 тут же после отсылки начинает анимацию движения (хотя задержка должна быть равна A+C), сервер получает данные и отправляет назад коректировочные параметры (античитерство)
тоже самое с игроком_2, там время разницы между игрой и сервером B+C
из-за того что двум игрокам надо знать друг получаем что игрок_1 получит данные от игрок_2 при времени A/2+B/2+2*C (половинный пинг, две обработки сервера - игроки же не одновременно отправляют данные)
но всё это идеализированая ситуация системы, крайне жестого завязаной на пингах, представим что у кого-то пинг очень резко подскачет до 500 мс (винда заглючила, игра ресурсы подгружает и тд)
в идеале коректировка должна правильно отобрасить всё движение игрока, но зачастую рывков не избежать, но что делать серверу ? он же получает почти что нажатия на клавиши (иначе как сделать античит?)
при этом сервер тупо не знает какая разница в внутри игровом времени себя и игроков, конечно оно синхронизируется, но это хорошо когда пинги не скачут, а иногда так подскочут что разница в внутриигровом времени будет больше и получится что к нам прийдут пакеты "из прошлого", по-сути в них игровое время уже меньше чем текущее

так что реальная задержка между данными может прыгать от A/2+B/2+2*C до A+B+2*C, надо еще учитывать что иногда мы теряем пакеты из-за времени (ихная актуальность теряется быстрее чем они доходят до клиента, а пока клиент запросит новый пакет тоже что-то надо отображать - процесс синхронизации еще больнее)
чтобы сделать задержку меньше моего написаного A/2+B/2+2*C всякие игры делают мега извращения - предсказания пути, то-есть по уже полученым данным о траектории пути, клиент начинает добавлять туда точки чтобы предсказать траекторию дальше, а если она не будет сходится с тем что мы получим от сервера ? ну тогда жестоко прийдется переставлять позицию или применять какую-то очень сложную коректировку которая не всегда правильно смотрится
из-за этого игровое время на сервере опережает игровое время на всех клиентах
но даже саму траекторию, полученую по-точкам от сервера, пусть даже без задержек, но надо же чем-то анимировать ? тут тоже свои причуды

исходя из этого можно сказать что проблемы следуйшие :
1) пинги не стабильны
2) разница в игровом времени на всех клиентах и сервере
3) нечеловеческие усилия алгоритмов предсказания и коректировщиков траектории
4) слишком большая разница во времени между действительно актуальными пакетами (движек q3 тупо игнорит не актуальные), а во время этой разницы надо отрисовать хотя бы 100 кадров (обычно)

так что создание хорошей сетевой части игры равноценно программированию всей игры

Последний раз редактировалось jimon, 28.03.2009 в 12:27.
 
Ответить с цитированием
Эти 10 пользователя(ей) сказали Спасибо за это полезное сообщение:
Arles (05.10.2009), DartWaider aka Yxo (28.03.2009), Egor Rezenov (21.07.2011), moka (28.03.2009), newman (30.03.2009), panmazai (19.09.2009), Phantom (27.03.2009), tormoz (28.03.2009), Yalenz (27.03.2009), ІГРОГРАЙКО (19.09.2009)
Старый 28.03.2009, 04:43   #10
DartWaider aka Yxo
AnyKey`щик
 
Регистрация: 12.02.2009
Сообщений: 6
Написано 2 полезных сообщений
(для 6 пользователей)
Ответ: Онлайн (Клиент <-> Сервер)

Быстро чётко и понятно, спасибо большое.
Кстати читал что сервы ВОВ изначально расчитывалиль на пинг в районе 400мс. И некоторые дядьки говорят что игру надо расчитывать с минимумом в 500мс, так как есть дяди игращие с чукотки через спутник...
(Offline)
 
Ответить с цитированием
Старый 28.03.2009, 12:19   #11
tormoz
Гигант индустрии
 
Аватар для tormoz
 
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений
(для 4,437 пользователей)
Ответ: Онлайн (Клиент <-> Сервер)

3) нечеловеческие усилия алгоритмов предсказания и коректировщиков траектории
вот этот пункт является главной сложностью всех динамичных сетевых игр.
все остальное - делается левой ногой (по сравнению с этим)
я еще не видел не одной нормальной аматорской сетевой игры с удовлетворительно реализованным предсказанием
__________________
(Offline)
 
Ответить с цитированием
Старый 28.03.2009, 12:54   #12
ffinder
Дэвелопер
 
Аватар для ffinder
 
Регистрация: 10.09.2007
Сообщений: 1,442
Написано 793 полезных сообщений
(для 1,460 пользователей)
Ответ: Онлайн (Клиент <-> Сервер)

2 jimon: можно было все это сказать короче.
онлайновые RPG - пошаговые игры, которые притворяются что они realtime (тик игровой логики может достигать нескольких секунд, а на клиенте просто проигрывается какая-то анимация для создания видимости движения)
онлайновые шутеры - HL2 например - используют свою систему времени, когда в отправленом пакете есть время (игровое) его отправки, поэтому даже когда пакет приходит позже (в разумных пределах), сервер смотрит что было в тот момент времени и корректирует попадания. Из-за этого возможен снайпинг на больших чем в локалке пингах.
что делать с онлайновыми файтингами я не знаю.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ІГРОГРАЙКО (19.09.2009)
Старый 28.03.2009, 13:05   #13
jimon
 
Сообщений: n/a
Ответ: Онлайн (Клиент <-> Сервер)

ffinder
в онлайновых рпг тоже надо делать некоторую синхронизацию, иначе у всех на экранах будет разное состояние игрового мира
 
Ответить с цитированием
Старый 28.03.2009, 13:34   #14
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: Онлайн (Клиент <-> Сервер)

На кри'08 на лекции по предсказанию в сетевых играх докладчик делился своими данными, они помещали сервер в"будущее" на 500мс, чтобы это компенсировало отставание клиентов. Однако по их словам при тестировании Москва-Чикаго пинг доходил до 1400мс... так что лучше больше чем меньше.

Разницу времени клиентов обычно обходят хранением истории игровых состояний на сервере за последние несколько секунд. Что нам это даёт, если у игрока огромный пинг, но его комп предсказывает поведение врагов (нет скачкообразных движений), то игрок попав во врага у себя на экране должен попасть и на сервере, для этого сервер для проверки попадания во врага, отматывает игровое состояние назад на величину пинга игрока. И смотрит попал ли он, если да клиенту шлётся подтверждение. Т.е. сервер должен обрабатывать игру в всоответствии с временем клиента.
__________________
(Offline)
 
Ответить с цитированием
Старый 28.03.2009, 20:15   #15
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Онлайн (Клиент <-> Сервер)

SBJoker, ужс, мне страшно становится, с временными факторами..
Хотя в CoD4 и HL2, очень чуствуется что реально игра происходит у тебя на компе, а не на сервере..
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
АПроблемы с анимированной моделью Hellfalcon 3D-программирование 6 02.07.2008 11:30
Оптимизация: Отбрасывание невидимых пол& Dstorton111 3D-программирование 20 27.04.2008 02:46
куплю исходник военной стратегии на blitz3d эд Blitz3D 15 18.02.2008 15:50
А вот и ещё тема по текстурированию ландшk CRASHER Создание текстур 4 16.01.2008 18:10


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


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