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



Новости
Владельцы Dark Souls в Steam получат скидку на Dark Souls Remastered
В то время, как подавляющее большинство компаний хлебом не корми - дай только в очередной раз содрать полную сумму за какое-нибудь переиздание, эти благородные японцы объявили о том, что все владельцы оригинальной Dark Souls (Prepare to Die Edition в Steam) получат… нет, не Dark Souls Remastered бесплатно, а скидку на неё.
Tencent вложит $ 15 млн в продвижение Fortnite в Китае
Китайская корпорация Tencent займётся продвижением Fortnite в Китае.