J'utilise une formule très basique pour calculer l'angle de mon sprite (vaisseau spatial par exemple) en fonction de la manette de la manette Xbox, c'est-à-dire que vous utilisez la manette pour faire pivoter le vaisseau.
Dans ma principale méthode de mise à jour:
shuttleAngle = (float) Math.Atan2(newGamePadState.ThumbSticks.Right.X, newGamePadState.ThumbSticks.Right.Y);
Dans ma méthode de tirage principal:
spriteBatch.Draw(shuttle, shuttleCoords, sourceRectangle, Color.White, shuttleAngle, origin, 1.0f, SpriteEffects.None, 1);
Comme vous pouvez le voir, c'est assez simple, je prends les radians actuels de la manette et les stocke dans un flotteur shuttleAngle
, puis je les utilise comme argument d'angle de rotation (en radians) pour dessiner la navette.
Pour une raison quelconque, lorsque je tourne le sprint, il semble collant à des angles de 0, 90, 180 et 270 degrés. Il veut s'installer à ces angles. Cela ne me donne pas une rotation douce et naturelle comme je le ferais dans un jeu qui utilise un mécanisme similaire. PS: Ma manette Xbox va bien!
shuttleAngle
pour voir si cela colle à ces anglesRéponses:
Cela pourrait être dû au fonctionnement de la zone morte du GamePad. La valeur par défaut est
GamePadDeadZone.IndependentAxes
, ce qui signifie que chaque axe est vérifié individuellement par rapport à la zone morte. Cela a tendance à faire en sorte que l'entrée s'aligne sur chaque axe de la manette analogique. Essayez plutôt d'utiliserGamePadDeadZone.Circular
:Cela devrait vous donner un contrôle beaucoup plus fluide sur les deux axes. Consultez la page MSDN et cet article de Shawn Hargreaves .
la source