Ich benutze die Xinput API, aber ich habe Probleme mit dem folgenden Bit Code. Meine Annahme ist, dass die Definition von R/LX und R/LY sich dynamisch ändern sollte, wie es immer wieder aufgerufen wird, aber der Wert für die Position des Daumensticks wird willkürlich auf -13108 gesetzt, also die normalisierte Größe von X und Y ist -.707, und die normalisierte Größe ist ~ .428. Ich versuche immer den Steuerknüppel zu bewegen, aber die Werte ändern sich nicht. Irgendwelche Ideen? Missverstehe ich die Xinput API? Ist der Status des Strukturcontrollers sinnvoll? Der Code unten ist nur für den linken Stick, aber der rechte Stick ist sehr ähnlich.Xbox Controller beide Daumen-Sticks Wert nicht ändern, mit Xinput
#define XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE 7849
#define XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE 8689
#define XINPUT_GAMEPAD_TRIGGER_THRESHOLD 30
struct CONTROLLER_STATE
{
XINPUT_STATE state;
bool bConnected;
};
CONTROLLER_STATE g_Controllers[4];
while(1)
{
//...
XINPUT_STATE state = g_Controllers[1].state;
float LX = state.Gamepad.sThumbLX;
float LY = state.Gamepad.sThumbLY;
//determine how far the controller is pushed
float magnitude = sqrt(LX*LX + LY*LY);
//determine the direction the controller is pushed
float normalizedLX = LX/magnitude;
float normalizedLY = LY/magnitude;
cout << " Y " << LY << endl;
float normalizedMagnitude = 0;
//check if the controller is outside a circular dead zone
if (magnitude > XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE)
{
//clip the magnitude at its expected maximum value
if (magnitude > 32767) magnitude = 32767;
//adjust magnitude relative to the end of the dead zone
magnitude -= XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE;
//optionally normalize the magnitude with respect to its expected range
//giving a magnitude value of 0.0 to 1.0
normalizedMagnitude = magnitude/(32767 - XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE);
cout << "normalizedMagnitude " << normalizedMagnitude;
}
else //if the controller is in the deadzone zero out the magnitude
{
magnitude = 0.0;
normalizedMagnitude = 0.0;
}
}
Könnte der Controller das Problem sein? – Zotto
Der von Ihnen gepostete Code zeigt beim Lesen der Controller nicht an. Der wahrscheinlichste Ort für Ihren Fehler ist jedoch der Code in der Nähe von XInputGetState(). (Du rufst XInputGetState an, oder?) –