Суббота, 2024-04-27, 11:26 AM
Приветствую Вас Гость | RSS
DR@1VER-team
Главная | Каталог статей | Регистрация | Вход
Меню сайта
Категории каталога
Мои статьи [10]
Приколы КСС [1]
Обзоры оружия [6]
Здесь лежат детальные обзоры оружий в css
Басни css [1]
Наш опрос
Оцените мой сайт
Всего ответов: 396
Главная » Статьи » Мои статьи

Ситуация «Слайдшоу из хитбоксов»:
«Вы выходите из-за угла стены/ящика и тут же быстро уходите назад. Вы не видите врага ,но при этом вы получаете повреждение.»

Объяснение:
Чтобы объяснить причину такого поведения игры, мы должны принять во внимание все, что происходит на Вашем компьютере, на компьютере сервера и на компьютерах других игроков.

- Вещи, о которых Вам надо знать, перед тем, как я продолжу
- Фактические повреждения (ну или расположения хитбоксов, если так понятнее) просчитываются на стороне сервера. Но на стороне клиента также отслеживается положение хитбоксов, но чисто для визуализации (скажем, искры от пуль при поподании в броню, брызги крови из тела и тд.), но об этом мы подробнее поговорим, когда дойдем до третьей ситуации.
- В идеале обмен пакетами происходит в течении 30 миллисекунд. Это то время за которое сервер успевает обновить информацию о Вас, а Вы – о сервере. Но на практике эта цифра в разы больше, судя по пингу.
- Время, которое тратится клиентом и сервером на обработку полученной информации столь мало, что его даже не имеет смысла брать во внимание.


Проблема в данной ситуации наблюдается в случае, если происходит так называемая «коррекция задержек (лагов)», которая встроена в движок Source. Чтобы полностью понять, зачем это нужно, для начала мы посмотрим, что происходит с игрой, если нет никакой корректировки лагов.

0 миллисекунда (Сцена 1)
Игрок 1: резко выходит из-за угла, видит Игрока 2, который находится в неподвижном состоянии.
Сервер: Ничего не происходит (Пакет не успел еще дойти)
Игрок 2: Стоит и никого не наблюдает

30 миллисекунд (Сцена 2)
Игрок 1: Уходит обратно в укрытие.
Сервер: получает пакет с информацией из Сцены 1 о том, что Игрок 1 вышел из-за своего укрытия и отправляет эту информацию Игроку 2.
Игрок 2: Ничего не происходит (помните? Пакет идет 30 миллисекунд, как от игрока до сервера, так и наоборот).

60 миллисекунд (Сцена 3)
Игрок 1: у себя на компьютере он спрятался в своем укрытии.
Сервер: Получает пакет из Ситуации 3 с информацией о том, что Игрок 1 находится опять за укрытием (так что данные сервера и Игрока 1 синхронизированы)
Игрок 2: Получает пакет с Ситуацией 1, видит Игрока 1, стреляет по нему, но естественно стреляет по пустому месту, так как игрок уже как 60 миллисекунд назад оказался опять в своем укрытии.

wink.gif Давайте для наглядности рассмотрим такую визуальную схему :IPB Image

Ну и получается в итоге следующая картина: Сервер получает информацию о выстрелах Игрока 2 по Игроку 1, в то время как Игрок 1 находится уже совсем в другом месте, следовательно, повреждения от выстрелов не учитываются. Это не очень-то справедливо, по отношению к Игроку 2, так как он-то как раз видит в это время Игрока 1.

И вполне резонный вопрос возникает: как решать эту проблему? Движок Source делает следующее. А именно программа просчитывает траекторию выстрела Игрока 2 и переносит ее так, как будто он стрелял в реального Игрока 1, независимо от того, где последний находится сейчас.

Сервер высчитывает идеальное значение переноса траекторий выстрелов, основываясь на пинге всех игроков.

IPB Image

На картинке: красный хитбокс показывает нам, где находился клиент, когда я стрелял по нему. Синий же показывает, где находился клиент на сервере, когда тот (сервер) получил информацию о моих выстрелах . Обратите внимание на красный цельный кубик в красном хитбоксе. Это то место, куда попал мой выстрел у меня на клиенте. Синий же кубик в синем хитбоксе – это же место положения попадания от моего выстрела, но с поправкой на мой пинг. Но не исключено, что траектория выстрела на мониторах других игроков так и осталась старой. Сбивает с толку!

Теперь рассмотрим Сцены с «коррекцией Пинга»:

0 миллисекунд (Сцена 1)
Игрок 1: резко выходит из-за угла, видит игрока 2, который находится в неподвижном состоянии.
Сервер: Ничего не происходит (Пакет не успел дойти)
Игрок 2: Стоит и никого не наблюдает

30 миллисекунд (Сцена 2)
Игрок 1: уходит обратно в укрытие
Сервер: получает пакет с информацией о сцене 1, Игрок 1 на открытом пространстве, но еще никто об этом не знает.
Игрок 2: Стоит и никого не наблюдает

60 миллисекунд (Сцена 3)
Игрок 1: спрятался
Сервер: получает пакет с информацией о сцене 2 (то есть сервер синхронизируется с клиентом 1: и там и там игрок 1 сидит в укрытии)
Игрок 2: Игрок 2 получает пакет с информацией о Сцене 1, видит Игрока 1, стреляет по нему. Но при получении информации о выстрелах, сервер делает коррекцию относительно пинга Игрока 2 и отнимает здоровье у Игрока 1, который в это время уже, как мы сказали, находится в укрытии. Игрок 1 в недоумении.

Теперь ситуация становится более справедливой, несмотря на то что, Игрок 1 находился уже в укрытии, Игрок 2, заметив его, выстрелил, тем самым сервер насчитал первому повреждения. Проблема только в том, что Первый игрок получает повреждения уже после того, как высунулся, то есть уже в укрытии и по этому скорее всего он напишет что-то знакомое всем типа «как меня достали эти лаги!» =). Итак, «корректировка лагов» заключается в том, что у Игрока 2 появляется возможность наносить повреждения Игроку 1 не обращая внимания на задержки между тем, пока движется Игрок 1 и тем пока его не заметит Игрок 2. Неплохое начало.

Другая польза от коррекции лагов заключается в том, что теперь вам не надо вести прицел за целью, чтобы попасть по ней, и когда два игрока встречаются нос к носу, то игрок с более низким пингом не получает приемуществ.

Взглянем на эти скриншоты (полученные благодаря sv_showimpacts 1). На них показана разница между позициями игрока на сервере (синий хитбокс) и на клиенте (красный), и траектория выстрела, которая показана красным и синим кубиком. Обратим внимание – сервер откорректировал траекторию выстрела относительно врага.

IPB Image IPB Image
Категория: Мои статьи | Добавил: D@Rk_NekRoN (2008-05-06)
Просмотров: 647 | Комментарии: 4 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа
Поиск
Друзья сайта
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Copyright MyCorp © 2024

Бесплатный хостинг uCoz