2013-04-27 3 views
2

Я пытаюсь повернуть ограничительную рамку в XNA, это то, как я обычно делаю это:Как повернуть ограничительную рамку в XNA?

new Rectangle((int)position.X, (int)position.Y, (int)texture.Width, (int)texture.Height); 

, но он в настоящее время не возврат вращения, которое в моем розыгрыше код:

spriteBatch.Draw(texture, position, null, Color.White, rotation, origin, scale, SpriteEffects.None, 1f); 

как мне повернуть его с помощью плеера? Я пытался понять это и наткнулся на это:

2D BoundingRectangle rotation in XNA 4.0

, но я не совсем уверен, как реализовать матрицы он говорит, и я делаю 2d игр, в отличие от 3d один здесь.

ответ

3

Структура Rectangleось ориентирована ограничивающий прямоугольник. Стороны всегда будут параллельны осям X и Y. Если вам нужен вращающийся ограничивающий прямоугольник, вы должны его реализовать самостоятельно.

Одним из алгоритмов расчета столкновений вращающихся прямоугольников является Separating Axis Theorem.

Матрицы, как указано в связанном ответе, необходимы в компьютерной графике. Вы можете вращать фигуру, поворачивая каждую из своих вершин с той же матрицей поворота. Это общее rotation matrix для двух измерений:

R(theta) = [cos(theta), -sin(theta); sin(theta), cos(theta)

Матрицы затем "применяются" для векторов с матрично-векторного умножения:

P' = R(theta) * P

которая равна

0

Я боролся с этим проблема в течение двух дней, прежде чем найти решение

Rotating bounding box

Надеется, что это поможет!

Смежные вопросы