Вращение части спрайта в XNA - PullRequest
2 голосов
/ 04 марта 2011

У меня есть текстура шириной 250 пикселей и высотой 2000 пикселей.Часть 250x250 нарисована на экране в соответствии с различными условиями (какой-то спрайт-лист, да).Все, что я хочу, это нарисовать его в фиксированном целевом прямоугольнике с некоторым поворотом.Возможно ли это?

1 Ответ

3 голосов
/ 04 марта 2011

Да. Вот как эффективно повернуть целевой прямоугольник:

Посмотрите на перегрузки для SpriteBatch.Draw.

Обратите внимание, что ни одна из перегрузок, которые принимают Rectangle в качестве пункта назначения, не принимает параметр вращения. Это потому, что такая вещь не имеет особого смысла. Неясно, как вы хотите, чтобы пункт назначения был повернут.

Но вы можете добиться того же эффекта, что и установка прямоугольника назначения, осторожно используя параметры position и scale. Объедините их с параметрами origin (центр масштабирования и поворота, указанными в пикселях по отношению к вашим sourceRectangle) и параметрами rotation для достижения желаемого эффекта.

(Если, с другой стороны, вы хотите «вписаться» в прямоугольник - эффективно масштабируя после вращения - вам также придется использовать параметр transformMatrix для Begin .)


Теперь - ваш вопрос не совсем ясен по этому вопросу: но если эффект, который вы получаете, больше похож на вращение прямоугольника source , это не то, чего вы можете достичь с помощью простого SpriteBatch.

Самый быстрый и быстрый способ добиться этого - установить область просмотра, которая действует как целевой прямоугольник. Затем нарисуйте свой вращающийся спрайт внутри него. Обратите внимание, что система координат SpriteBatch основана на окне просмотра, а не на экране.

"Более приятный" (но гораздо труднее реализовать) способ сделать это - вообще не использовать SpriteBatch, а реализовать собственный рисунок спрайта, который позволит вам вращать координаты текстуры.

...