2010-07-14 5 views
2

DirectInput API를 사용하여 응용 프로그램에서 다양한 게임 패드 컨트롤러를 사용하려고합니다. 내가 알 수 있듯이 축은 장치간에 다르게 매핑됩니다.DirectInput - 게임 패드 컨트롤러 유형 결정

다른 축 컨트롤 할당을 허용하도록 컨트롤러를 구별하기 위해 DeviceInformation.ProductName/InstanceName을 사용하는 것 이외의 다른 컨트롤러 유형을 결정하는 일반적인 방법이 있습니까?

답변

0

컨트롤러 유형 (FirstPerson, Joystick, Gamepad, ...) 만 알면 DeviceInformation.DeviceType을 사용하십시오.

특정 컨트롤러가 연결되어 있는지 확인하려면 ProductName 또는 더 나은 ProductGuid를 사용하십시오. ProductName은 두 개의 서로 다른 컨트롤러에 대해 동일 할 수 있습니다. 반면에 ProductGuid는 동일한 생산 비용의 두 컨트롤러에 대해서도 다를 수 있습니다.

ProductGuid를 사용하면 의심 할 여지없이 연결된 장치 인스턴스를 식별 할 수 있습니다.

dev.GetObjects(DeviceObjectTypeFlags.Axis)을 통해 foreach하고 축 이름 (및 오프셋)을 확인하려고 할 수도 있지만 "X 축"축이 실제로 someDevice.CurrentJoystickState.X에 매핑된다는 보증은 없습니다.

연결될 컨트롤러 (사용자가 직접 응용 프로그램을 개발할 때만 허용됨)에 대한 모든 매핑을 미리 수행하고 해당 정보를 응용 프로그램의 구성 파일에 저장하거나 사용자가 새 장치를 직접 매핑 할 수있는 양식을 제공해야합니다. 현재이 문제의 범위를 벗어납니다.

이 기본 정보 (ProductGuid)를 얻으려면 장치를 만들 필요가 없습니다. 내 자신의 대답은 나에게 잔소리를했기 때문에 내가 뛰어 들었다 : 이러한 속성은


이 업데이트 (Microsoft.DirectX.DirectInput.Manager.GetDevices()에서 DeviceList 내) DeviceInstance 이미 사용할 수 있습니다 주제 조금 더. 그래서 switch(doi.Usage)가 자동으로 얻을 수있는 사용

(with JoystickState s = _currentDevice.CurrentJoystickState) 
    Usage Axis value 
    48  s.X 
    49  s.Y 
    50  s.Z 
    51  s.Rx 
    52  s.Ry 
    53  s.Rz 
    54  s.GetSlider()[0] 

:

// loop through the axes of an acquired device: 
foreach (DeviceObjectInstance doi in 
    _currentDevice.GetObjects(DeviceObjectTypeFlags.Axis)) 
{ 
    doi.Name; // the name of the axis, e.g. 'X-Achse' (that's a german device...) 
    doi.Offset/4; // the enumeration 'index' of the axis 
    doi.UsagePage; // the UsagePage determines the context of the axis value 
    // vvvv 
    doi.Usage; // the Usage tells you which JoystickState field to map to. 
    // ^^^^ 
} 

지금까지, 나는이 사용 값 표현을 발견
그래서 여기가 어떤 값에 매핑하는 축 결정하는 방법입니다 대응하는 축 값

+0

사용법에서 DirectInput 축까지의 전체 매핑은 http://msdn.microsoft.com/en-us/windows/hardware/gg487464.aspx에 있습니다. 또한'doi.Guid'는 타겟 매핑을 직접 포함합니다. –

+0

이러한 사용 코드는 USB 사용 테이블에서 가져온 것입니다. 자세한 내용은 http://www.usb.org/developers/devclass_docs/Hut1_12v2.pdf를 참조하십시오. 비행 시뮬레이션을 프로그래밍하거나, 기계 소프트웨어를 사용하거나, 라이트건, 헤드 트래커 또는 장갑과 같은 이국적인 입력에 대한 지원을 원할 경우이 옵션이 유용 할 것입니다. –