В вычислениях DirectInput - это устаревший [1] API Microsoft для сбора данных, вводимых пользователем компьютера, через такие устройства ввода , как мышь , клавиатура или геймпад . Он также предоставляет систему для сопоставления действий, которая позволяет пользователю назначать определенные действия в игре кнопкам и осям устройств ввода. Кроме того, он обрабатывает устройства тактильной обратной связи (ввода / вывода). Microsoft представила новую библиотеку ввода под названием XInput специально для контроллера Xbox 360 .
DirectInput и XInput предоставляют преимущества по сравнению с обычными входными событиями Win32:
- они позволяют приложению получать данные с устройств ввода, даже когда приложение находится в фоновом режиме
- они обеспечивают полную поддержку любого типа устройства ввода, а также тактильную обратную связь
- с помощью сопоставления действий приложения могут получать входные данные без необходимости знать, какое устройство сгенерировало эти входные данные.
Хотя DirectInput является частью библиотеки DirectX , он не подвергался значительным изменениям со времени DirectX 8 (2001–2002 гг.). Microsoft рекомендует в новых приложениях использовать цикл сообщений Windows для ввода с клавиатуры и мыши вместо DirectInput (как указано в слайд-шоу Meltdown 2005 [2] ) и использовать XInput вместо DirectInput для контроллеров Xbox 360.
История
DirectX включает DirectInput версии 1.0 (1995 г.). Первоначально он предлагал настоящую поддержку только для джойстиков, поскольку модули мыши и клавиатуры просто предоставляли оболочку для стандартного Win32 API . В DirectX версии 3.0 (1996 г.) добавлена поддержка клавиатур и мышей; также улучшена поддержка джойстика. DirectX 5.0 (1997) включал значительно улучшенную поддержку джойстика, включая добавление тактильной обратной связи, увеличение количества кнопок, изменение базовой модели драйвера устройства и включение API на основе COM . Поддержка мыши также увеличила количество видимых кнопок с четырех до восьми. В DirectX 7.0 (с 1999 г. по настоящее время) в DirectInput была добавлена давно обещанная функция просмотра отдельных мышей во многом как отдельные джойстики, но эта функция не работала с более поздней версией Windows XP , хотя с 2010 г.[Обновить] он работает с Windows 98 / Me и DirectX 9. DirectX 8.0 (2000), последняя версия с серьезными изменениями, включала отображение действий и более широкую поддержку различных типов устройств.
Хотя изначально Microsoft предполагала, что DirectInput будет обрабатывать все входные данные, этого не произошло. По состоянию на 2011 г.[Обновить]Microsoft не рекомендует использовать DirectInput для клавиатур или мышей и начала продвигать новый XInput для контроллеров Xbox 360. [3] В Windows Vista , Windows 7 и более поздних версиях Windows встроенный пользовательский интерфейс сопоставления действий был удален. [4] DirectInput недоступен для приложений Магазина Windows.
XInput
XInput, [5] API для «следующего поколения» контроллеров, был введен в декабре 2005 года вместе с запуском Xbox 360 . Этот набор инструкций обеспечивает полную поддержку контроллеров Xbox 360 в Windows XP SP1 и последующих операционных системах и описан Microsoft как более простой в программировании и требующий меньше настроек, чем DirectInput. XInput совместим с DirectX версии 9 и новее.
Поддержка геймпада Xbox 360
Xbox 360 контроллер с драйверами Microsoft по умолчанию, имеет следующие ограничения с DirectInput, по сравнению с Xinput:
- левый и правый триггеры будут действовать как одна ось, представляющая разность со знаком между триггерами, а не как независимые аналоговые оси
- эффекты вибрации не будут работать
- запрос устройств гарнитуры не будет работать
Ни одно из этих ограничений отсутствует при использовании контроллера Xbox 360 с XInput. [6]
Эффекты вибрации не будут работать на контроллере Xbox One .
Согласно MSDN , «комбинация левого и правого триггеров в DirectInput разработана специально. Игры всегда предполагали, что оси устройства DirectInput центрируются, когда пользователь не взаимодействует с устройством. Однако контроллер Xbox 360 был разработан для регистрации минимального значение, а не центр, когда триггеры не удерживаются ". MSDN предложила «решение» объединения триггеров, установив для одного триггера положительное направление, а другого - отрицательное, так что никакое взаимодействие с пользователем не указывает на то, что DirectInput находится в центре «элемента управления». [7]
Однако вышеизложенное игнорирует тот факт, что многие контроллеры DirectInput, такие как геймпады с двумя аналоговыми джойстиками и наборы контроллеров гоночного руля , уже отображают триггеры и педали независимо. Кроме того, многие устройства DirectInput также обладают эффектами вибрации. По крайней мере, один драйвер, XBCD, предоставляет контроллерам Xbox 360 поддержку вибрации, мертвые зоны и (опционально) независимые триггеры через DirectInput. [ необходима цитата ] Это говорит о том, что драйвер контроллера Microsoft Xbox 360 намеренно имеет более слабую поддержку DirectInput, а не из-за каких-либо различий между API DirectInput и XInput. С другой стороны, контроллер Xbox 360 и XInput поддерживают только базовое управление вибрационными двигателями [8] [9], в отличие от большой палитры различных эффектов, поддерживаемых DirectInput. [10]
DirectInput против XInput
Microsoft не вносила никаких серьезных изменений в DirectInput со времен DirectX 8 и представила XInput позже в DirectX 9: остается некоторая путаница в отношении текущего статуса и будущего этих двух API.
API XInput также с 2010 г.[Обновить] имеет ограничения, которых нет в DirectInput:
- XInput поддерживает только контроллеры «следующего поколения». Это ограничивает его в основном контроллерами для Xbox 360, которые также имеют драйверы Windows. Устаревшие контроллеры Windows, джойстики и универсальные устройства тактильной обратной связи не поддерживаются.
- XInput поддерживает максимум четыре контроллера одновременно. Это ограничение Xbox, перенесенное на Windows . Хотя по состоянию на 2010 год[Обновить] Для некоторых компьютерных игр требуется более четырех контроллеров одновременно, у DirectInput такого ограничения нет.
- XInput не поддерживает клавиатуры, мыши или устройства типа мыши. Хотя это отражает рекомендацию Microsoft не использовать DirectInput с этими устройствами [11], программисты могут использовать DirectInput с этими устройствами.
- XInput поддерживает максимум 4 оси, 10 кнопок, 2 триггера и цифровую клавиатуру с 8 направлениями на контроллер, по сравнению с поддержкой DirectInput для 8 осей, 128 кнопок и полнодиапазонного POV. (Количество осей, кнопок и триггеров, поддерживаемых XInput, напрямую соответствует контроллеру Xbox 360.)
Преимущество XInput перед DirectInput:
- При использовании с контроллером Xbox 360 левая и правая триггерные кнопки будут действовать независимо, а не как одна кнопка [12]
По состоянию на 2011 г.[Обновить]XInput предназначен для контроллеров Xbox 360, а DirectInput - для любого контроллера. В XInput 1.4, представленной в Windows 8, была повторно введена поддержка запросов для устройств гарнитуры. [13]
Рекомендации
- ^ https://docs.microsoft.com/previous-versions/windows/desktop/ee416842(v=vs.85)
- ^ "Слайд-шоу Meltdown 2005 (.zip)" . Архивировано 21 мая 2015 года . Проверено 13 ноября 2012 .CS1 maint: bot: исходный статус URL неизвестен ( ссылка )
- ^ «Использование движения мыши высокой четкости» . MSDN . Microsoft . Проверено 25 января 2009 .
- ^ «DirectInput ConfigureDevices в Windows Vista» . Web.archive.org. 27 декабря 2008 г. Архивировано из оригинального 27 декабря 2008 года . Проверено 13 ноября 2012 .
- ^ http://msdn.microsoft.com/en-us/library/windows/desktop/ee417014(v=vs.85).aspx
- ^ http://msdn.microsoft.com/en-us/library/windows/desktop/ee417014(v=vs.85).aspx
- ^ «XInput и DirectInput» . Microsoft. 2012-09-17 . Проверено 27 декабря 2012 .
- ^ «Геймпад - Управление грохотом» . Проект Free60. Архивировано из оригинала на 2009-03-13 . Проверено 25 января 2009 .
- ^ «XINPUT_VIBRATION» . Msdn.microsoft.com . Проверено 25 января 2009 .
- ^ «ДЕФФЕКТ» . MSDN . Microsoft . Проверено 25 января 2009 .
- ^ «DirectInput» . MSDN . Microsoft . Проверено 30 мая 2010 .
- ^ https://msdn.microsoft.com/en-us/library/windows/desktop/ee417014(v=vs.85).aspx
- ^ "Функция XInputGetAudioDeviceIds" . MSDN . Проверено 10 декабря 2013 года .
Внешние ссылки
- Документация Microsoft по DirectInput [ постоянная мертвая ссылка ]
- XInput и DirectInput