Конгер Д.
Физика для разработчиков компьютерных игр
стр. 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, ожидая, когда доступ будет восстановлен. Если доступ невоз



Новости
Rust на Марсе с элементами PUBG
Выживать, как и следует из названия, придётся на Марсе. Помимо самого выживания, в игре присутствует и сюжет.
Переиздание Age of Empires выйдет 20 февраля
Как заявлено теперь, Age of Empires: Definitive Edition станет доступна на ПК с Windows 10 с 20 февраля 2018 года.