Конгер Д.
Физика для разработчиков компьютерных игр
стр. 407

Метод, приведенный в листинге 14.19 - это еще один из методов класса игры. Прежде чем он вызовет метод UpdateFrame (), платформа вызывает метод Processlnput (). Это позволяет игре реагировать на действия пользователя, прежде чем обновлять кадр соответственно смоделированной физике.

Каждому буферизованному устройству ввода требуется отдельный буфер. Метод Processlnput () объявляет буфера ввода для клавиатуры и мыши в строках 3-4 листинга 14.19. Размеры этих буферов должны быть как минимум равны размерам, которые игра передает функции SetProperty () из Directlnput. Вспомните, что функция SetProperty () вызывалась в листинге 14.18. Массивы, объявленные в строках 3-4 листинга 14.19 - это массивы структур DIDEVICEOBJECTDATA.

Чтобы извлечь данные из буфера клавиатуры, из метода Processlnput () вызывается метод IDirectInputDevice8: :GetDeviceDa-ta() в строках 10-14. Первый параметр метода GetDeviceData () - это количество байтов в структуре DIDEVICEOBJECTDATA. Второй параметр -это адрес начала буфера клавиатуры, созданного в строке 3 листинга.

Третий параметр метода GetDeviceData () — это общее количество структур в буфере. Когда метод GetDeviceData () заканчивает выполняться, в третьем параметре содержится действительное количество событий ввода, записанных в буфере.

Последний параметр - это набор флагов. Единственный флаг, распознаваемый в данный момент - это DIGDD_PEEK, который позволяет вашей программе искать данные в буфере, не удаляя их. Последующие вызовы GetDeviceData () в этом случае будут возвращать те же данные. Обычно игры сбрасывают этот параметр в 0, и данные удаляются из буфера при их считывании.

Если метод GetDeviceData () не может прочитать данные с клавиатуры, это обычно означает, что к ней потерян доступ. Это событие похоже на потерю графических поверхностей, но, к счастью, восстановить доступ к устройству ввода проще, чем восстановить графические поверхности. Все, что нужно для этого - вызвать метод IDirectInputDevice8: : Acquire (), как показано в строке 18 листинга 14.19.

Возможно, метод IDirectInputDevice8:: Acquire () не сможет восстановить доступ к устройству ввода. Придется немного подождать. В этом случае в строке 19 метод Processlnput () начинает выполнять цикл while, ожидая, когда доступ будет восстановлен. Если доступ невоз



Новости
Список персонажей SoulCalibur 6 пополнил Вольдо
В Сети появился новый трейлер SoulCalibur 6, посвящённый Вольдо — он пополнил список персонажей, которые будут доступны в день релиза игры.
Анонсирован скорый выход обновления «Ночная жизнь» в GTA Online
Компания Rockstar представила трейлер обновления «Ночная жизнь» для GTA Online.