DirectInput
Inom datorer är DirectInput ett äldre Microsoft API för att samla in input från en datoranvändare, via inmatningsenheter som musen , tangentbordet eller en gamepad . Det tillhandahåller också ett system för handlingskartläggning, som gör att användaren kan tilldela specifika åtgärder inom ett spel till knapparna och axlarna på inmatningsenheterna. Dessutom hanterar den haptisk återkoppling (ingång/utgång) enheter. Microsoft introducerade ett nytt indatabibliotek som heter XInput specifikt för Xbox 360-kontrollern .
DirectInput och XInput ger fördelar jämfört med normala Win32-inmatningshändelser:
- de gör det möjligt för en applikation att hämta data från inmatningsenheter även när applikationen är i bakgrunden
- de ger fullt stöd för alla typer av inmatningsenheter, såväl som för haptisk feedback
- genom actionmapping kan applikationer hämta indata utan att behöva veta vilken typ av enhet som genererade indata
Medan DirectInput utgör en del av DirectX- biblioteket har det inte reviderats nämnvärt sedan DirectX 8 (2001–2002). Microsoft rekommenderar att nya applikationer använder Windows-meddelandeslingan för tangentbords- och musinmatning istället för DirectInput (som anges i Meltdown 2005-bildspelet), och att använda GameInput istället för DirectInput och andra äldre API:er, som XInput, för kontroller.
Historia
DirectX inkluderade DirectInput från version 1.0 (1995). Det erbjöd initialt riktigt stöd endast för joysticks, eftersom mus- och tangentbordsmodulerna helt enkelt gav omslag till standard Win32 API . DirectX version 3.0 (1996) lade till stöd för tangentbord och möss; det förbättrade också styrspaksstödet. DirectX 5.0 (1997) inkluderade avsevärt förbättrat joystick-stöd, inklusive att lägga till haptisk feedback, öka antalet knappar, ändra den underliggande enhetsdrivrutinmodellen och införliva ett COM -baserat API . Musstöd ökade också antalet knappar sett från fyra till åtta. I DirectX 7.0 (1999-) lade DirectInput till en sedan länge utlovad funktion att se enskilda möss ungefär som individuella styrspakar, men funktionen fungerade inte med det senare släppta Windows XP, även om det från och med 2010 fungerar med Windows 98/Me och DirectX 9. DirectX 8.0 (2000), den senaste versionen med stora förändringar, inkluderade actionmapping och bredare stöd för olika typer av enheter.
Medan Microsoft från början hade för avsikt att DirectInput skulle hantera alla ingångar, gick det inte. Från och med 2011 rekommenderar Microsoft inte längre att använda DirectInput för tangentbord eller möss, och har börjat trycka på den nyare XInput för Xbox 360-kontroller. I Windows Vista , Windows 7 och senare Windows-versioner har det inbyggda gränssnittet för actionmapping tagits bort. DirectInput är inte tillgängligt för Windows Store-appar.
XInput
XInput, ett äldre API för "nästa generation"-kontroller, introducerades i december 2005 tillsammans med lanseringen av Xbox 360 . Denna specifikation gav stöd för Xbox 360-kontroller i Windows XP SP1 och efterföljande operativsystem, och beskrivs av Microsoft som enklare att programmera för och kräver mindre installation än DirectInput. XInput är kompatibel med DirectX version 9 och senare.
Stöd för Xbox 360-kontroller
En Xbox 360 Controller , med Microsofts standarddrivrutin, har följande begränsningar med DirectInput, jämfört med XInput:
- de vänstra och högra triggarna kommer att fungera som en enda axel som representerar den signerade skillnaden mellan triggarna, inte som oberoende analog axel
- vibrationseffekterna fungerar inte
- fråga efter headsetenheter fungerar inte, XInput 1.4 som en del av Windows 8 introducerade stöd för Xbox-headset.
Enligt MSDN är kombinationen av vänster och höger utlösare i DirectInput designad. Spel har alltid antagit att DirectInput-enhetsaxlar är centrerade när det inte finns någon användarinteraktion med enheten. Xbox 360-kontrollern var dock designad för att registrera minimum värde, inte centrum, när utlösare inte hålls." MSDN erbjöd "lösningen" att kombinera triggers, sätta en trigger i en positiv riktning och den andra i en negativ riktning, så ingen användarinteraktion tyder på att DirectInput av "kontrollen" är i centrum.
Ovanstående ignorerar dock det faktum att många DirectInput-kontroller, såsom gamepads med dubbla analoga spakar och racinghjulskontroller , redan kartlägger triggers och pedaler oberoende av varandra. Dessutom har många DirectInput-enheter också vibrationseffekter. Minst en drivrutin från tredje part, XBCD, ger Xbox 360-kontrollerna vibrationsstöd, döda zoner och (valfritt) oberoende analoga/digitala triggers genom DirectInput som dess XInput-drivrutin har. Detta tyder på att Microsofts Xbox 360-styrenhetsdrivrutin fick avsiktligt svagare DirectInput-stöd, snarare än på grund av eventuella skillnader mellan DirectInput och XInput API:er. Å andra sidan stöder Xbox 360-kontroller som använder XInput endast mycket grundläggande kontroll av vibrationsmotorer i motsats till en större palett av effekter som stöds via DirectInput.
DirectInput vs XInput
Fördelar med DirectInput över XInput:
- XInput stöder endast kontroller som fungerar med Microsoft Xbox-konsolen
- XInput stöder maximalt fyra kontroller åt gången. DirectInput har ingen sådan gräns
- XInput stöder inte tangentbord, möss eller enheter av mustyp. Även om detta speglar Microsofts rekommendation att inte använda DirectInput med dessa enheter, kan programmerare använda DirectInput med dessa enheter.
- XInput stöder maximalt 4 axlar, 10 knappar, 2 triggers och 8-riktningar digital pad per kontroller, jämfört med DirectInputs stöd för 8 axlar, 128 knappar och full-range POV. (Antalet axlar, knappar och utlösare som XInput stöder motsvarar direkt Xbox 360-kontrollern.)
Fördelar med XInput över DirectInput:
- Stöds för närvarande av Microsoft