Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Графика -> Гончаров Д. -> "DirectX 7.0 Для программистов" -> 193

DirectX 7.0 Для программистов - Гончаров Д.

Гончаров Д., Салихо Т. DirectX 7.0 Для программистов — Спб.: Питер, 2001. — 528 c.
ISBN 5-318-00173-4
Скачать (прямая ссылка): dirext7dlyaprogrammistov2001.djvu
Предыдущая << 1 .. 187 188 189 190 191 192 < 193 > 194 195 196 197 198 199 .. 229 >> Следующая

В приведенном примере происходит создание интерфейса IDi rectPl ayLobby3A, на что указывает его идентификатор класса — IID IDirectPl ayLobby3A.
Получение настроек соединения
После создания интерфейса IDirectLobby3 приложению необходимо получить текущие настройки соединения. Для этого используется уже описанная функция IDirectPlayLobby3: :GetConnectionSettings(). Если она возвратит код ошибки DPERR_ N0TL0BBYED, это означает, что приложение было запущено не лобби-клиентом. В этом случае пользователю придется указывать настройки самостоятельно. Ниже приведен фрагмент программы, который может быть использован для получения настроек соединения.
//Получение настроек соединения
hRet - dp1obby->GetConnectionSettings( 0. NULL, &dwSize ); if ( FAILED (hRet) && (DPERRBUFFERTOOSMALL !- hRet) )
{
if( hRet — DPERRNOTLOBBIED )
//Приложение запущенно не лобби - клиентом!
{
if( dpi Connection )
{
delete[] dpiConnection; dpi Connection * NULL;
}:
if( dplobby )
{
dpiobby->Release; dplobby - NULL;
}:
return (DP OK);
>
return (hRet):
}
//Создание буфера необходимого размера
//и повторный вызов функции GetConnectionSettings
if( dpi Connection )
{
delete[] dpi Connection; dpi Connection * NULL;
}:
dpiConnection - (DPLCONNECTION*)new BYTE[ dwSize ]:
if ( FAILEDt hRet « dplobby->GetConnect1onSett1ngs( 0. dpiConnection, &dwSize ) ) ) return (hRet):
Пример создания лобби-приложения
445
Как вы уже заметили, в приведенном примере происходит проверка на ошибку, причем код DPERR BUFFERTOSMALL в проверку не включается, так как его появление ожидается только при первом вызове функции, когда размер буфера неизвестен. Если ошибка возникла по причине отсутствия лобби-клиента, интерфейс IDi rectPl ayLobby3 уничтожается. Если причиной ошибки все же явился недостаточный размер буфера, происходит создание буфера нужного объема и повторный вызов функции GetConnectionSettingsO.
Установка параметров соединения
Приложение может как получать параметры соединения, так и устанавливать их. Следующий пример демонстрирует, каким образом приложение может проинформировать лобби-клиента о том, что необходима постоянная проверка связи и что сервер сеанса может быть изменен.
dpi Connecti on - >1 pSessi onDesc - >dwFl ags - DPSESSION_KEEPALIVE | DPSESSIONMIGRATEHOST;
if ( FAILEDC hRet - dplobby->SetConnectionSettings( 0, 0, dplConnection ) ) ) return (hRet);
Как вы уже заметили, мы заполняем поле dwFlags структуры DPSESSI0NDESC2, которая, в свою очередь, входит в структуру DPLCONNECTION. Последняя передается в качестве параметра функции SetConnectionSettingsO, которая непосредственно и передает эту информацию лобби-клиенту.
Присоединение к сеансу
После того как были установлены настройки соединения, можно производить присоединение к сеансу. Функция IDi rectPl ayLobby3: :ConnectEx() открывает сеанс и присоединяется к нему.
if ( FAILEDC hRet - dplobby->ConnectEx( 0, IIDIDirectPlау4А, (VOID**)&dplay, NULL ) ) ) return (hRet);
Если приложение было запущенно не лобби-клиентом, функция ConnectExO возвратит код ошибки DPERR NOTLOBBIED. В этом случае пользователю придется самому выбирать соединение для вашего приложения. Если функция возвратит код DP 0K, это означает, что соединение успешно установлено и теперь можно приниматься за создание игрока.
Создание игрока
Создание игрока в лобби практически ничем не отличается от способа, используемого в DirectPlay. Единственная разница заключается в том, что все настройки игрока могут быть получены от лобби-клиента вызовом функции GetConnecti onSetti ngs().
На этом использование DirectPlayLobby заканчивается и управление передается в руки DirectPlay. За обмен сообщениями, создание групп и игроков отвечает уже он. Это не означает, что DirectPlayLobby становится ненужным, иногда обмен информацией между лобби-клиентом и приложением должен происходить, например, при выходе игрока из сеанса.
446
Урок 13 • Соединение при помощи лобби
Подводя итоги
В этом уроке мы рассмотрели:
0 Понятие DirectPlayLobby.
0 Виды сообщений DirectPlayLobby.
0 Использование внутреннего и внешнего лобби. 0 Взаимодействие DirectPlay и DirectPlayLobby. 0 Пример использования лобби-клиента.
Часть б
Компоненты DirectX в действии
УРОК
Этапы создания программы
В этом (последнем) уроке мы рассмотрим основные аспекты создания приложения, использующего все описанные в книге компоненты DirectX. Цель программы, разбираемой в данном уроке, — продемонстрировать достаточность приведенных в книге сведений для самостоятельного написания игровых приложений. Обратите внимание, что листинги программы этого урока не приводятся целиком. Вместо этого будут рассмотрены лишь наиболее интересные моменты, отличающие эту программу от примеров предыдущих уроков. Полный листинг приводимого примера вы сможете найти на прилагаемом компакт-диске.
Постановка задачи
Мысли вслух
На наш взгляд, начинающему программисту, пытающемуся написать свою собственную игру, не следует сразу замахиваться на что-то грандиозное. Напротив, стоит начать с создания достаточно простой (но интересной) игры, может быть, дополнив ее какими-то особенностями. Например, реализовать свою версию бессмертного Арканоида, Тетриса или Пасьянса. Такой подход имеет ряд преимуществ по сравнению с «глобальными» проектами:
Предыдущая << 1 .. 187 188 189 190 191 192 < 193 > 194 195 196 197 198 199 .. 229 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.