Войти
XNAФорум

Поворот спрайта вокруг заданной точки

#0
21:21, 3 авг. 2010

Итак, хна, используется стандартный спрайтБатч. На карте есть враги, которые двигаются в 8 направлениях, вид сверху, по этому ни какой разницы в анимациях движения в разные стороны нет, кроме поворота.
Сейчас для каждого направления движения заготовлена своя анимация, что мне не очень нравится, ибо почти одно и тоже, а место занимает.
Как вариант оптимизации вижу сортировку врагов по направлению движения и отрисовку в 8 этапов (батчей), каждая отрисовка со своей матрицей преобразования. Но придётся вычислять положение текстуры с учётом поворота, что мне совсем не хочется.
Есть ли какие другие варианты решения данной проблемы?


#1
9:11, 4 авг. 2010

Mog
> Но придётся вычислять положение текстуры с учётом поворота
А почему бы не вращать и выводить спрайт вокруг центра?
Тогда никакой разницы, повёрнут он или нет - координаты те же.

#2
10:16, 4 авг. 2010

Я знаю, что можно применить свою матрицу преобразований для каждого батча, а вот о том чтобы повернуть отдельный спрайт я не слышал.
Или ты предлагаешь поворачивать текстуру в памяти?

#3
11:28, 4 авг. 2010

http://creators.xna.com/en-US/education/catalog/?lc=1033&p=4

см примеры по ссылке и не разрушай людям мозг с поворотом текстуры в памяти! :)

#4
13:32, 4 авг. 2010

ret
> не разрушай людям мозг с поворотом текстуры в памяти! :)
даже не собирался, пошёл по ссылки и НЕОЖИДАННО вспомнил, что в методе Draw(...) можно указать угол поворота, поворачивает на ура. Тесты показали что поворот вокруг левого верхнего угла. Персонаж при поворотах прыгает :) буду думать как внести поправку в положение спрайта, ибо вращать нужно вокруг центра.

#5
16:47, 4 авг. 2010

To Mog:
в spriteBatch.Draw(...) есть параметр Origin.
Origin это и есть центр вращения спрайта. Например, у тебя спрайт персонажа размерами 64x64. Ставишь Origin 32x32 и персонаж вращается вокруг своей оси.
P.S.
Читай MSDN, там много интересного написано.

#6
17:48, 4 авг. 2010

unnamed
Спасибо, как раз то что и надо было.
> Читай MSDN, там много интересного написано.
Регулярно такой бойдой занимаюсь.
Дело было так: сначала меня жёстко торкнуло и я напрочь забыл о том, что в методе Draw(...) есть куча интересных параметров, в том числе поворот. Зайдя на обед я про поворот вспомнил, быстро затестил пошёл работать дальше по пути выдумывая велосипед (и таки выдумал) как правильно повернуть. Так выпьем же за то чтобы вас так жёстко никогда не торколо.
Закрываю тему.

XNAФорум

Тема в архиве.

Тема закрыта.