Ответ: Онлайн (Клиент <-> Сервер)
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.
|