Korzystam z bardzo podstawowej formuły, aby obliczyć, pod jakim kątem mój duszek (na przykład statek kosmiczny) powinien być skierowany, w oparciu o drążek kontrolera Xbox, tzn. Za pomocą drążka obracasz statek.
W mojej głównej metodzie aktualizacji:
shuttleAngle = (float) Math.Atan2(newGamePadState.ThumbSticks.Right.X, newGamePadState.ThumbSticks.Right.Y);
W mojej głównej metodzie losowania:
spriteBatch.Draw(shuttle, shuttleCoords, sourceRectangle, Color.White, shuttleAngle, origin, 1.0f, SpriteEffects.None, 1);
Jak widać, jest to dość proste: biorę bieżące radiany z pinezki i przechowuję je w pływaku, shuttleAngle
a następnie używam tego jako argumentu kąta obrotu (w radianach) do rysowania wahadłowca.
Z jakiegoś powodu, gdy obracam sprint, wydaje się lepki przy kątach 0, 90, 180 i 270 stopni. Chce osiedlić się pod tymi kątami. Nie zapewnia mi to płynnej i naturalnej rotacji, jaką czułbym w grze, która używa podobnej mechaniki. PS: Mój kontroler Xbox jest w porządku!
shuttleAngle
aby zobaczyć, czy to trzyma się pod tymi kątamiOdpowiedzi:
Może to być spowodowane działaniem martwej strefy GamePada. Domyślnie wartość
GamePadDeadZone.IndependentAxes
ta oznacza, że każda oś jest sprawdzana indywidualnie względem strefy martwej. Powoduje to, że sygnał wejściowy jest przyciągany do każdej osi analogowego drążka sterowego. Zamiast tego spróbuj użyćGamePadDeadZone.Circular
:Powinno to zapewnić znacznie płynniejszą kontrolę w obu osiach. Sprawdź stronę MSDN i ten artykuł autorstwa Shawna Hargreavesa .
źródło