Estoy usando una fórmula muy básica para calcular a qué ángulo debe enfrentar mi sprite (por ejemplo, la nave espacial) en función del control del mando Xbox, es decir, se usa el control para girar la nave.
En mi método de actualización principal:
shuttleAngle = (float) Math.Atan2(newGamePadState.ThumbSticks.Right.X, newGamePadState.ThumbSticks.Right.Y);
En mi método de dibujo principal:
spriteBatch.Draw(shuttle, shuttleCoords, sourceRectangle, Color.White, shuttleAngle, origin, 1.0f, SpriteEffects.None, 1);
Como puede ver, es bastante simple, tomo los radianes actuales de la barra de control y los guardo en un flotador shuttleAngle
y luego los uso como argumento del ángulo de rotación (en radianes) para dibujar el transbordador.
Por alguna razón, cuando giro el sprint, se siente pegajoso en ángulos de 0, 90, 180 y 270 grados. Quiere establecerse en esos ángulos. No me está dando una rotación suave y natural como me sentiría en un juego que usa una mecánica similar. PD: ¡Mi controlador Xbox está bien!
shuttleAngle
para ver si eso se queda en esos ángulosRespuestas:
Puede deberse a cómo funciona la zona muerta de GamePad. Su valor predeterminado es
GamePadDeadZone.IndependentAxes
, lo que significa que cada eje se verifica contra la zona muerta individualmente. Esto tiende a hacer que la entrada se ajuste a cada eje del joystick analógico. En su lugar, intente usarGamePadDeadZone.Circular
:Esto debería darle un control mucho más suave en ambos ejes. Echa un vistazo a la página de MSDN y este artículo de Shawn Hargreaves .
fuente