|
|
||
|
Музыка по жанрам Еще по теме
Материалы о музыке |
Теги страницы: DirectPlay Voice. Как использовать DirectPlay Voice API. Это малоизвестный компонент DirectPlay, который позволяет реализовать общение голосом в реальном времени в многопользовательской игре. Это одна из тех редких технологий, которые относительно просто реализуются, но при этом являются большим плюсом к игре. DirectPlay Voice API. Возможно, что DirectPlay Voice API возник из-за одного простого факта: многопользовательские игры гораздо более интересны, если вы можете слышать возгласы других игроков. Очень мало чувств могут сравниться с тем, которое вы испытывайте, слыша проклятия игрока, который понял, что он обречен, когда вы напали на него из засады. С помощью DirectPlay Voice вы можете реализовать это в вашей игре, написав всего лишь несколько строчек кода. Основы. DirectPlay Voice работает, отправляя голосовые данные через соединение DirectPlay. Он начинает с записи голоса игрока. Запись может начинаться вручную (например, пользователь должен нажать кнопку на джойстике или клавиатуре перед как начать говорить) или автоматически (система начинает запись, когда она обнаруживает резкое изменение громкости на микрофоне). При самом простом использовании, когда игрок начинает говорить, DirectPlay Voice снимает его голос с микрофона (с низкой частотой выборки) и потом сжимает его, используя специальный алгоритм сжатия голоса. После DirectPlay Voice отсылает сжатые данные на другой компьютер, используя сетевой протокол DirectPlay. Другой компьютер проводит декомпрессию голосовых данных и воспроизводит их, используя звуковую карту. В идеале все происходит достаточно быстро, и общение кажется мгновенным, но при активном использовании сети, может быть небольшая задержка между тем, как один игрок произнес фразу и как другой игрок ее услышал. Топология сети DirectPIay Voice. Я только что описал пример пиринговой (peer-to-peer) связи DirectPIay Voice. При такой топологии каждый компьютер отвечает за отправление голосовых данных игрока на все остальные компьютеры. Это значит, что если вы играете с пятью другими игроками, то когда вы говорите, ваш компьютер должен отправить ваши голосовые данные пяти различным компьютерам. Как вы можете понять, это может сильно загрузить ваш входящий и исходящий каналы. Стандартный сжатый голос требует пропускной способности в 8кбит/с (хотя вы можете использовать различные алгоритмы сжатия с требованиями к пропускной способности от 1.2 кб ш/с до 13кбит/с). Это значит, что вам нужна пропускная способность сети равная 40кбит/с (8кбит/с х5), когда говорите вы, и вам необходимо еще скачивать как минимум 40кбит/с (в том случае, если одновременно с вами говорит кто-нибудь еще). Если вы играете по локальной сети, нет проблем - в локальной сети минимальная пропускная способность 10Мбит/с. Но если вы играете по модему или по широкополосной сети с небольшими скоростями загрузки, одновременная скорость 40кбит/с для загруз- Kii(u|}load//eKaimBann,!f(dom2loa(i) может быть недостижима. Для таких случаев DirectPIay Voice позволяет использовать две другие топологии - топологию эстафетного (перепосылающего) сервера (Forwarding Server Topology) или топологию смешивающего сервера (Mixing Server Topology). В топологии эстафетного, когда вы говорите, ваш компьютер отсылает ваш голосовой поток центральному голосовому серверу. А сервер, в свою очередь, отправляет ваш голос всем остальным компьютерам в игре. Это освобождает ваш компьютер от необходимости посылать множество копий данных - голосовой сервер делает это за него. Таким образом, только голосовой сервер должен иметь высокие скорости загрузки. Обратите внимание, тем не менее, что клиенты все равно должны иметь высокие скорости скачивания, потому что, если пять человек заговорят разом, один клиент должен быть способен скачать одновременно пять потоков. Считайте, что топология эстафетного сервера - это топология «один вверх, много вниз» - даже в наихудшем случае каждому клиенту придется загружать один голосовой поток; тем не менее, может быть придется одновременно скачивать много голосовых потоков. Третья топология - топология смешивающего сервера - топология «один вверх, один вниз». В этой топологии сервер получает данные от клиентов, а потом проводит декомпрессию полученных данных. После этого каждому клиенту отправляется один, специально сделанный, содержащий смесь всех голосов, относящихся к клиенту. Например, если игрок 1 и игрок 2 говорят одновременно, сервер отправит голосовой поток игрока 2 игроку 1, голосовой поток игрока 1 игроку 2 и смесь обоих голосовых потоков остальным игрокам. Таким образом, каждому клиенту скачивать только один поток. Тем не менее, серверу нужно работать значительно больше: вместо того, чтобы просто заниматься перераспределением голосовых потоков, как это делается в топологии эстафетного сервера, теперь ему нужно проводить декомпрессию, смешивать и снова сжимать смешанные потоки для каждого клиента. Топология смешивающего сервера платит вычислительной мощностью за меньшую нагрузку на пропускную способность. Конечно, наилучшую топологию для использования следует выбирать, исходя из где и как проходит игра. Если игра идет по локальной сети, то наилучшим выбором будет просто соединение напрямую - у вас большая пропускная способность и прямое соединение гарантирует, что каждый компьютер делает одно и то же количество работы. Если игра идет через Интернет, то все зависит от того, есть ли выделенный сервер. Смешивающий сервер тратит большое количество вычислительных ресурсов - настолько большое, что для большинства игр не имеет. Если все говорят разом, даже с голосовым сервером, вам понадобится пропускная способность скачивания равная 40ic6и i/V. Чтобы получить все пять потоков смысла запускать саму игру, потому что частота смены кадров будет очень маленькой. Если голосовой сервер одновременно является игроком, то лучшим выбором будет топология эстафетного сервера. Тем не менее, если голосовой сервер является выделенным и не должен рисовать треугольники или делать что-либо кроме сетевой работы, он легко справится со смешиванием голосов, и лучшим выбором будет топология смешивающего сервера. Совет. Вместо того чтобы просто предоставлять вашим игрока, выбор одной из топологий, вы можете написать код. Например, если клиент подсоединяется к игре по модему, ваш код может автоматически решить использовать прямую топологию. Для начала, краткий курс DirectPlay. DirectPlay Voice работает над DirectPlay, Это значит, что если вы никогда раньше не писали код, который использует DirectPlay, вам нужно разобраться с основными принципами DirectPlay прежде, чем вы сможете общаться через DirectPlay Voice. Эта книга не про DirectPlay, так что я собираюсь сконцентрироваться на основах и буду рассказывать достаточно быстро. Тем не менее, очень важно для понимания принципов работы DirectPlay У^к.ч. чтобы вы поняли, как работает ядро DirectPlay. Так что, если у вас проблемы с пониманием принципов из этого краткого описания или вы хотите узнать о тех вещах, про которые я специально не стал рассказывать (например, лобби (lobbies) или групп игроков (player groups), то вы сами должны подкрепить свои знания разбором некоторых примеров программ DirectPlay использованием некоторых дополнительных источников информации, более подробно рассказывающих про DirectPlay и использование сетей. Поток событий В сессии DirectPlay. Некоторым будет тяжело разобраться с DirectPlay. Хитрость в том, чтобы рассмотреть достаточно высокоуровневые этапы, которые вам необходимы, чтобы подсоединиться и сыграть в многопользовательскую игру. Существует три основных этапа в любой многопользовательской игре. Сначала вы подсоединяетесь к игре. Потом, по мере того как вы играете, ваш код отсылает и получает сообщения о состоянии игры, например позиции боевых единиц в RTS или тот факт, что игрок только что выстрелил из оружия, и т. д. Большое количество времени вашего игрового кода будет потрачено на отсылку и прием сообщений. Вам необходимо создавать и получать ваши собственные типы сообщений, и также вам необходимо обрабатывать системные сообщения DirectPlay (игрок присоединился, игрок отсоединился и т. д.). Совет. ЗВ различных играх используются различные методы передачи информации самыми короткими сообщениями. Большинство игр синхронизуют состояние игры, посылают и принимают сообщения, содержащие, определенные изменения мира (например, сервер пошлет клиенту сообщение «танк номер 4 только что вышел на позицию (5,16)»). Наконец, существует обязательная фаза «деинициализации и завершения работы», Это. важно всегда,, но особенно это важно здесь, потому что, если вы забудете это сделать, DirectPlay может не заметить, что ваша игра остановилась, и другие играющие люди не уведомления о том, что вы выбыли. Теперь, когда вы изучили высокоуровневый обзор, давайте немного укрупним «изображение». Последующие разделы по порядку подробно объяснят шаги, которые вам нужно предпринять, чтобы использовать DneclPhiy. Совет. DirectPIay, как и DirectMusic, использует множество GUID (glob ally unique identifier; Они используются для идентификации игр, с поставщиков услуг и некоторых других вещей вмногопальзоватепьской игре. ОиШуникален и во времени и в пространстве - когда вы создаете ( ¦'¦' IL 'вы можете быть уверен, что он не совпадает ни с одним из когда-либо созданных GU1D и ни с одним из тех, что когда-либо будут созданы. |
|