Ответ 1
Чтобы ответить на ваш первый вопрос, на 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), down - (0, 1), left is (-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 градусов для увеличения, так что, когда я получил эту часть. Значение Up в этом случае рисует текстуру на экране так же, как и в файле. Таким образом, вниз будет рисовать текстуру вверх дном.