Прямой ввод - DirectInput
В вычислениях Прямой ввод это наследие[1] Microsoft API для сбора данных от пользователя компьютера через устройства ввода такой как мышь, клавиатура, или геймпад. Он также предоставляет систему для отображение действий, который позволяет пользователю назначать определенные действия в игре кнопкам и осям устройств ввода. Дополнительно он обрабатывает тактильная обратная связь (ввод / вывод) устройства. 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) включал значительно улучшенную поддержку джойстика, включая добавление тактильной обратной связи, увеличение количества кнопок, изменение базовой модели драйвера устройства и включение COM -на основании API. Поддержка мыши также увеличила количество видимых кнопок с четырех до восьми. В 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 7 и более поздних версиях Windows удален встроенный пользовательский интерфейс сопоставления действий.[4] DirectInput недоступен для приложений Магазина Windows.
XInput
XInput,[5] ан API для контроллеров «следующего поколения», была представлена в декабре 2005 г. одновременно с выпуском Xbox 360. Этот набор инструкций обеспечивает полную поддержку контроллеров Xbox 360 в Windows XP SP1 и последующие операционные системы, и Microsoft описывает его как более простое в программировании и требующее меньше настройки, чем DirectInput. XInput совместим с DirectX версия 9 и выше.
Поддержка контроллера Xbox 360
An Контроллер 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 кнопок и полнодиапазонной точки обзора. (Количество осей, кнопок и триггеров, поддерживаемых 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 года.. Получено 2012-11-13.CS1 maint: BOT: статус исходного URL-адреса неизвестен (ссылка на сайт)
- ^ «Использование движения мыши высокой четкости». MSDN. Microsoft. Получено 2009-01-25.
- ^ «DirectInput ConfigureDevices в Windows Vista». Web.archive.org. 27 декабря 2008 г. Архивировано из оригинал 27 декабря 2008 г.. Получено 2012-11-13.
- ^ 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. Получено 2012-12-27.
- ^ «Геймпад - Rumbler Control». Проект Free60. Архивировано из оригинал на 2009-03-13. Получено 2009-01-25.
- ^ «XINPUT_VIBRATION». Msdn.microsoft.com. Получено 2009-01-25.
- ^ "ДЕФФЕКТ". MSDN. Microsoft. Получено 2009-01-25.
- ^ "Прямой ввод". MSDN. Microsoft. Получено 2010-05-30.
- ^ https://msdn.microsoft.com/en-us/library/windows/desktop/ee417014(v=vs.85).aspx
- ^ "Функция XInputGetAudioDeviceIds". MSDN. Получено 10 декабря 2013.