如何在DirectInput8中访问操纵杆数字pad ?



一直在寻找和搜索,我找不到如何在Dinput8中访问操纵杆D-Pad。我们有DIJOYSTATE2结构中获取信息,但不知道选择什么。我知道rgb_buttons []数组保存按钮信息,并且lXlY模拟摇杆。

仍然不知道方向键(交叉)

我相信rgdwPOV是你想要的。我假设你已经创建了你的设备,SetDataFormat(&c_dfDIJoystick2)并获得了它。

我将DPAD的状态转换为16位整型,这样每个位代表每个DPAD中的1个方向,每个DPAD 4位(上、下、左、右)。

下面是c++中的一个例子:

DIJOYSTATE2 DeviceState;
HRESULT hr = DIDevice->GetDeviceState(sizeof(DIJOYSTATE2), &DeviceState);
uint16_t rgdwPOV = 0;
for (int i = 0; i < 4; i++) { // In banks of 4, shift in the sate of each DPAD 0-16 bits 
switch (DeviceState.rgdwPOV[i]) {
case 0:     rgdwPOV |= (byte)(1 << ((i + 1) * 0)); break; // dpad[i]/up, bit = 0
case 18000: rgdwPOV |= (byte)(1 << ((i + 1) * 1)); break; // dpad[i]/down, bit = 1
case 27000: rgdwPOV |= (byte)(1 << ((i + 1) * 2)); break; // dpad[i]/left, bit = 2
case 9000:  rgdwPOV |= (byte)(1 << ((i + 1) * 3)); break; // dpad[i]/right, bit = 3
}
}

最新更新