Для ответа на ваш первый вопрос: 0 градусов вверх, 90 градусов вправо, 180 градусов вниз и 270 градусов влево. Здесь - это простое руководство по ротации 2D XNA, которое даст вам больше информации.
Что касается преобразования векторов в углы и обратно, я нашел пару хороших реализаций здесь :
Vector2 AngleToVector(float angle)
{
return new Vector2((float)Math.Cos(angle), (float)Math.Sin(angle));
}
float VectorToAngle(Vector2 vector)
{
return (float)Math.Atan2(vector.Y, vector.X);
}
Кроме того, если вы новичок в 2D-программировании, вы можете захотеть взглянуть на Torque X 2D , который предоставит вам множество возможностей. Если вы заплатили за разработку для XNA, вы получаете двоичные файлы движка бесплатно, и есть служебный класс, который конвертирует из углов в векторы и обратно, а также другие полезные функции, подобные этой.
Редактировать: Как отметил Раньери в комментариях, эта функция не имеет смысла, когда вверх равен 0 градусов. Вот тот, который делает (вверх равен (0, -1), справа это (1, 0), вниз это (0, 1), слева это (-1, 0):
Vector2 AngleToVector(float angle)
{
return new Vector2((float)Math.Sin(angle), -(float)Math.Cos(angle));
}
float VectorToAngle(Vector2 vector)
{
return (float)Math.Atan2(vector.X, -vector.Y);
}
Я также хотел бы отметить, что некоторое время я использовал Torque, и он использует 0 градусов для повышения, так что вот где я получил эту часть. Это означает, что в этом случае выведите текстуру на экран так же, как в файле. Так что вниз будет рисовать текстуру вверх ногами.