Забыли пароль?
Регистрация
Обман в геймдеве — компенсация задержки
23.09.2024 12:28:34
Перед тем как расскажу как эту проблему можно решить, небольшое лирическое отступление о том, чем геймдев концептуально отличается от любого другого программирования с которым я сталкивался до. В геймдеве сплошь и рядом обман! Но... в хорошем смысле этого слова.

В финансовой сфере обман исключен полностью. Баги, конечно, никто не отменял, но основной упор всегда и везде идет на точность и предсказуемость. При этом если где-то что-то пошло не так - должны быть доступны все трейсы каждого изменения, чтобы можно было разобраться что пошло не так и откатить/починить.

В геймдеве же основной упор делается на удовлетворенности игрока. Существует множество ситуаций, особенно в динамичных играх, вроде сетевых шутеров, когда все сделать точно попросту не нужно.
Вот вам пример: игрок А с пингом в 10мс стреляет в игрока Б с пингом в 50мс. Если в такой ситуации все обработать честно, при такой задержке в обмене сообщениями с сервером игрок А убьет игрока Б еще до того, как тот сможет его увидеть. В итоге имеем полностью удовлетворенного игрока А, который действует как ниндзя и убивает всех очень быстро банально потому, что те его даже заметить не успевают и полностью неудовлетворенного игрока Б, который не понимает что вообще происходит. В результате перестанут играть оба, потому что обоим очень быстро станет не интересно.

В Genesyx, кстати, тоже случались подобные проблемы когда один игрок вроде бы успешно убегал по пустошам от другого, а тот на самом деле уже его настиг и затянул в бой. Есть различные подходы к решению этой проблемы и в их основе обычно лежит идея работы с игровым временем (или кадром), а не реальным. Это означает, что в моем примере выше программисту нужно будет учитывать пинги всех игроков и в момент условного нажатия выстрела игроком А не выполнять эту операцию сразу, а высчитывать в какой игровой момент (в каком кадре) это должно случиться по отношению к игроку Б и отложить выстрел в будущее. Обычно такие операции закладываются в половину самого долгого пинга, чтобы для всех участников игры все выглядело более-менее естественно. Заложенная задержка позволит игроку Б увидеть отыгрывающие анимации игрока А и, возможно, успеть увернуться от пули.

Кроме того такой подход позволяет серверу вести подковерную игру, ведь если все действия откладываются на начало в определенном кадре, получается, что расчеты сервера всегда впереди, а все игроки видят уже прошлое. А, будучи все время впереди, сервер может принимать дополнительные решения по тому кто прав, а кто нет, опираясь на главный постулат о том, что все игроки должны остаться довольными, а правда, на самом деле, никому не нужна. И делать это сервер будет опираясь на то, какую информацию он уже успел отдать для проигрывания всем участникам, чтобы не случалось конфузов. Например если сервер понимает, что игроку А он уже отдал анимацию выстрела и визуально явное попадание, а игрок Б все еще не получил анимацию отхода, хотя уже успел нажать кнопку - в итоге отдаст попадание обоим, потому что в этом случае у игрока Б будет меньше вопросов к игре чем у игрока А. И вот в таких ситуациях максимально важна скорость, а никак не заложенная мной надежность.



05.10.2026 Icecream установил новый образ.
05.10.2026 Самый мощный игрок недели - Меф. (максимальный рейтинг: 5093.1)
05.10.2026 Одеяло заработал 18 тактических очков за последнюю неделю.
05.10.2026 Укуренный Ёжик добыл 12 находок за городом за последнюю неделю.
05.10.2026 Истребитель киборгов недели - Виконт. Убито 85 групп киборгов.
05.10.2026 Виконт заработал 1041428 опыта за последние сутки.
04.10.2026 !Лис! продал Калипсо 10.00 золотых кредитов на аукционе за 99.01 обычных.
04.10.2026 !Лис! продал Калипсо 10.00 золотых кредитов на аукционе за 151.00 обычных.
04.10.2026 !Лис! продал Калипсо 10.00 золотых кредитов на аукционе за 99.01 обычных.
04.10.2026 !Лис! продал Калипсо 28.00 золотых кредитов на аукционе за 447.01 обычных.
04.10.2026 !Лис! продал Калипсо 50.00 золотых кредитов на аукционе за 799.01 обычных.
04.10.2026 !Лис! продал Калипсо 50.00 золотых кредитов на аукционе за 799.01 обычных.
04.10.2026 !Лис! продал Калипсо 50.00 золотых кредитов на аукционе за 799.01 обычных.
04.10.2026 !Лис! продал Калипсо 50.00 золотых кредитов на аукционе за 799.01 обычных.
04.10.2026 !Лис! продал Калипсо 50.00 золотых кредитов на аукционе за 799.01 обычных.
04.10.2026 !Лис! продал ~.maks.~ 50.00 золотых кредитов на аукционе за 801.00 обычных.
04.10.2026 Skystorm и Icecream вступили в брак.
04.10.2026 Виконт заработал 358428 опыта за последние сутки.
03.10.2026 Icecream продал Псих Одиночка 100.00 золотых кредитов на аукционе за 1800.01 обычных.
03.10.2026 Qwuack продал Атеист 10.00 золотых кредитов на аукционе за 801.00 обычных.
Начать игру
Рейтинг игроков
Октябрь 2026


Меф. 18
!Лис! 12
Militaris* 15
Qwuack 9
Straik2025 12
Виски 9
Серго 14
Мартосик 12
mouse* 12
roma 11
Рейтинг кланов
Октябрь 2026


0 PHOENIX 18.5
0 Гринпис 8.4
0 Волчья Стая 5.1
0 Полиция 3.0
0 ANGELS 2.1
0 Эволюция 2.0
0 Immortals 1.0
0 T.R.I.A.D.A. 0.0
Все кланы
Чемпионат
Сентябрь - Ноябрь


PHOENIX 12 (4, 8)
Полиция 11 (9, 2)
Гринпис 7 (7, 0)
Волчья Стая 2 (2, 0)
ANGELS 2 (0, 2)
Сектор 13 0 (0, 0)
Мафия 0 (0, 0)
Legion 0 (0, 0)
Alkatraz 0 (0, 0)
Resident Evil 0 (0, 0)
Все кланы
Союзы


Titanium
Nuntios Caeli
Bang!
Социальные сети


Группа ВКонтакте
Дневник разработчика