XNA Track повернутые позиции пикселей - PullRequest
2 голосов
/ 03 мая 2010

Я делаю игру в xna, где танк должен перемещаться по ландшафту. Мне нужно уметь находить дно танка, когда он вращается, чтобы я мог двигать его вверх и вниз, когда игрок перебирает ландшафт.

Например, если у меня есть спрайт с верхним левым углом в 400 300 и я поворачиваю его вокруг его центра на 45 градусов вокруг его центра, как мне найти новые местоположения нижней дорожки.

Спасибо


Спасибо за ответ Langaurd.

Я посмотрел ссылку на статью раньше, но не понял, как она работает.

Я играю в 2-х стороннюю прокрутку. Когда игрок движется влево и вправо, танк также должен наклоняться, чтобы следовать контуру местности.

У меня есть два вектора, в которых хранится задняя часть дорожки, и один, в котором хранится передняя часть дорожки.

Я пытался

Vector2 backBottom = new Vector2(5, 25);
Vector2 frontBottom = new Vector2(5, 32);

backBottom = Vector2.Transform(backBottom+position, Matrix.CreateRotationZ(angle));
frontBottom = Vector2.Transform(frontBottom+position, Matrix.CreateRotationZ(angle));

но это дало мне некоторые странные значения

Ответы [ 2 ]

0 голосов
/ 06 декабря 2011

Вам нужно определить более четкую ориентацию для вашего спрайта. Я бы использовал Front и Up Vector для танка. Теперь вы поворачиваете их вместе под углом, которым движется ваш танк, в зависимости от местности. Допустим, эти векторы находятся в центре вашего спрайта. и ваш спрайт вращается, точно так же, как ваш верхний и передний векторы. Теперь просто умножьте свой Halfheight на вектор -Up, и вы должны иметь свой локальный нижний центр, добавить свою позицию танка, и у вас будет ваша мировая позиция нижней колеи.

Важно: Не путайте точку, которая может быть выражена вектором, или реальным вектором, который не имеет позиции и показывает только направление. Для направлений важно нормализовать вектор.

Извините за расплывчатый ответ, но ваш вопрос тоже немного расплывчатый.

0 голосов
/ 05 мая 2010

Не на 100% ясно, что именно вы пытаетесь сделать.Вы упоминаете спрайт, который является 2D, но ваше описание в 3D терминах.Если вы делаете 2D вид сбоку, то вы не можете сказать, что бак повернут на 45 градусов.Если вы делаете двухмерный вид сверху вниз, то вам не должно быть никакого значения, где находится дно треда.

В любом случае два предложения.Если вам не терпится отследить повернутые пиксели, прочитайте эту статью: 2D-столкновение с трансформированными пикселями с сайта creators.xna.com.Однако я бы порекомендовал отслеживание векторов.Используйте два вектора, чтобы представить расположение треков, а затем используйте Vector2.Transform, чтобы вращать их вместе с резервуаром.Затем вы можете использовать векторы, чтобы проверить, не попали ли треки в что-то, под каким углом они находятся, и т. Д.

...