Estou usando uma fórmula muito básica para calcular qual ângulo meu sprite (nave espacial, por exemplo) deve estar enfrentando com base no polegar do controlador Xbox, ou seja, você usa o polegar para girar a nave.
No meu principal método de atualização:
shuttleAngle = (float) Math.Atan2(newGamePadState.ThumbSticks.Right.X, newGamePadState.ThumbSticks.Right.Y);
No meu método principal de desenho:
spriteBatch.Draw(shuttle, shuttleCoords, sourceRectangle, Color.White, shuttleAngle, origin, 1.0f, SpriteEffects.None, 1);
Como você pode ver, é bastante simples, pego os radianos atuais do manípulo e os guardo em um flutuador shuttleAngle
e depois o uso como argumento do ângulo de rotação (em radianos) para desenhar o ônibus espacial.
Por alguma razão, quando eu giro o sprint, ele fica pegajoso nos ângulos de 0, 90, 180 e 270 graus. Ele quer se estabelecer nesses ângulos. Não está me dando uma rotação suave e natural como eu me sentiria em um jogo que usa um mecânico semelhante. PS: Meu controle Xbox está bem!
shuttleAngle
para ver se isso varas nesses ângulosRespostas:
Pode ser por causa de como a zona morta do GamePad funciona. O padrão é o
GamePadDeadZone.IndependentAxes
que significa que cada eixo é verificado individualmente contra a zona morta. Isso costuma fazer com que a entrada se encaixe em cada eixo do dedo analógico. Em vez disso, tente usarGamePadDeadZone.Circular
:Isso deve proporcionar um controle muito mais suave nos dois eixos. Confira a página do MSDN e este artigo de Shawn Hargreaves .
fonte