Я использую очень простую формулу, чтобы вычислить угол, на который должен быть направлен мой спрайт (например, космический корабль), на основе большого пальца контроллера Xbox, т.е. вы используете этот большой палец для вращения корабля.
В моем основном методе обновления:
shuttleAngle = (float) Math.Atan2(newGamePadState.ThumbSticks.Right.X, newGamePadState.ThumbSticks.Right.Y);
В моем основном методе розыгрыша:
spriteBatch.Draw(shuttle, shuttleCoords, sourceRectangle, Color.White, shuttleAngle, origin, 1.0f, SpriteEffects.None, 1);
Как вы можете видеть, это довольно просто, я беру текущие радианы из большого пальца и сохраняю их в плавающей точке, shuttleAngle
а затем использую это как аргумент угла поворота (в радианах) для рисования шаттла.
По какой-то причине, когда я поворачиваю спринт, он чувствует себя липким под углами 0, 90, 180 и 270 градусов. Он хочет обосноваться под этими углами. Это не дает мне плавного и естественного вращения, как я чувствовал бы в игре, которая использует подобную механику. PS: мой контроллер Xbox в порядке!
shuttleAngle
чтобы увидеть, придерживается ли он этих угловОтветы:
Это может быть из-за того, как работает мертвая зона GamePad. По умолчанию
GamePadDeadZone.IndependentAxes
это означает, что каждая ось проверяется по мертвой зоне в отдельности. Это приводит к привязке входа к каждой оси аналогового джойстика. Вместо этого попробуйте использоватьGamePadDeadZone.Circular
:Это должно дать вам гораздо более плавное управление на обеих осях. Посетите страницу MSDN и эту статью Шона Харгривза .
источник