» Новости
» Регистрация :: Вход
» Форумы сайта :: IRC-чат
» Файловый архив
» Все статьи :: Все обзоры
» Галерея
» Поиск
 
Клиент-сервер в HL и CS, Newbie e-mail автора
Различные аспекты поведения клиента
.: Просмотров: 3063 :: Печатать текущую страницу :: Печатать все страницы :.
Предыдущая страница Все страницы:

" Перевод: Newbie

" Оригинал статьи

Различные аспекты поведения клиента

Движок Half-life обладает еще несколькими трюками, позволяющими увеличивать ощущениереалистичного окружения без задержек.

Когда игрок стреляет, клиент сразу же запускает анимацию оружия, рассчитывает траекториюпули и отрисовывает попадание в объект (miss decal или "промах") там, куда как он думаетпопала пуля - и все это несмотря на факт, что сервер еще даже не знает о выстреле, неговоря уже о том, куда ушла пуля и попала ли она во что либо. Таким образом у игрокасоздается ощущение, что окружение реагирует на его выстрелы моментально.

После обработки траектории пули и отрисовки попадания, клиент отсылает информацию овыстреле на сервер. Однако клиент не отсылает информацию о траектории пули, только тотфакт, что игрок совершил выстрел.

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

Вот почему на видео, приведенном ниже, отрисовывается "промах" (следы от пуль) настеклянных панелях и только потом они разбиваются.

Client side miss decals

Важно понимать, что то, что думает сервер - куда по его мнению попала пуля - и есть то,что происходит на самом деле. Клиент же просто "обманывает" игрока, создавая ощущение,что задержка отсутствует.

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

Если сервер думает, что игрок промазал, он ничего не делает - "промах" уже отрисован.Все "промахи" - подделка, они рисуются не там, куда в реальности попала пуля.

Клиент никогда не отрисовывает "попадание" до тех пор, пока не получает приказа отсервера (то есть пока сервер не решит, что попадание состоялось). Представьте что было быв противном случае: игрок стреляет в край стеклянной панели. Клиент думает что игрок попали разбивает стекло. После этого клиент сообщает о выстреле серверу, а тот считает чтопуля прошла мимо.

И что теперь? Не может же клиент по волшебству заново построить стекло? Конечно нет.Идея в том, что если клиент думает, что игрок попал куда то, он не делает ничего, кромеотрисовки "промаха" если его можно отрисовать на данном объекте (на стекле напримерможно, а на заложнике нет).

Однако есть маленькое исключение. Если клиент думает, что пуля попала в игрока илизаложника, он проигрывает звук попадания. В результате иногда вы можете слышать звукпопадания, когда самого попадания не случилось.

До версии 1.1.0.6 Half-life, отрисовка "промахов" на клиенте могла намного отличаться оттого, что думает сервер, особенно с полуавтоматическими снайперскими винтовками. ПатчHalf-life 1.1.0.8 исправил эту ошибку, сделав траектории клиента и сервера болееблизкими. Ситуация улучшилась и траектории стали похожи, но они все еще отличаются.

В заключении. Учитывая что клиент не может отрисовать "промах" на игроке или заложнике,если клиент думает что пуля попала, а сервер думает что промазала, эта пуля просто"исчезнет" - ведь ни попадания, ни промаха не было отрисовано.

Предыдущая страница Все страницы:
Реклама

 
Наша-Life
Свяжитесь с нами
Экспорт новостей в RSS 2.0