Ich verwende eine sehr einfache Formel, um anhand des Daumensticks des Xbox-Controllers zu berechnen, in welchen Winkel mein Sprite (z. B. Raumschiff) zeigen soll, dh Sie verwenden den Daumenstift, um das Schiff zu drehen.
In meiner Hauptaktualisierungsmethode:
shuttleAngle = (float) Math.Atan2(newGamePadState.ThumbSticks.Right.X, newGamePadState.ThumbSticks.Right.Y);
In meiner Hauptzeichnungsmethode:
spriteBatch.Draw(shuttle, shuttleCoords, sourceRectangle, Color.White, shuttleAngle, origin, 1.0f, SpriteEffects.None, 1);
Wie Sie sehen, ist es ganz einfach. Ich nehme das aktuelle Bogenmaß vom Daumenstiel, speichere es in einem Schwimmer shuttleAngle
und verwende es dann als Drehwinkelargument (im Bogenmaß) zum Zeichnen des Shuttles.
Wenn ich den Sprint drehe, fühlt er sich aus irgendeinem Grund bei Winkeln von 0, 90, 180 und 270 Grad klebrig an. Es will sich in diesen Winkeln niederlassen. Es gibt mir keine sanfte und natürliche Rotation, wie ich sie in einem Spiel mit einer ähnlichen Mechanik fühlen würde. PS: Mein Xbox-Controller ist in Ordnung!
shuttleAngle
zu sehen, ob dieser in diesen Winkeln bleibtAntworten:
Dies könnte daran liegen, wie die Totzone des GamePad funktioniert. Der Standardwert ist
GamePadDeadZone.IndependentAxes
, dass jede Achse einzeln gegen die Totzone geprüft wird. Dies führt dazu, dass der Eingang an jeder Achse des analogen Daumensticks einrastet. Versuchen Sie stattdessen FolgendesGamePadDeadZone.Circular
:Dies sollte Ihnen eine viel reibungslosere Kontrolle auf beiden Achsen geben. Schauen Sie sich die MSDN-Seite und diesen Artikel von Shawn Hargreaves an .
quelle