2010-11-08 3 views
0

Кто-нибудь знает, как применить преобразование к спрайту без возможностей метода SpriteBatch.Draw()?XNA sprite transormation

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

+0

Ваш вопрос не имеет смысла, могли бы вы попробовать перефразировать это Что вы пытаетесь достичь –

+0

мне нужно:.? Сначала циклического сдвига спрайта, а затем масштабируйте его. Метод SpriteBatch.Draw() вначале масштабирует спрайт, а затем вращает его. –

ответ

0

Используется матрица, переданная в SpriteBatch.Begin. Использование этого метода является единственным способом достижения операции масштабирования после операции поворота через SpriteBatch (при условии, что ваш масштаб неравномерен).

Недостатком является то, что если масштаб каждого спрайта отличается, вам нужно будет начать новую партию для каждого.

Ваш другой вариант - написать собственный дозатор спрайтов - но это кажется немного резким.

0

Спасибо! Я нашел решение, но очень медленно = (

this.displayMatrix = 
       Matrix.CreateTranslation(-(new Vector3(Position, 0))) * 
       Matrix.CreateRotationZ(1) * 
       Matrix.CreateScale(new Vector3(new Vector2(1f, 2f), 1)) * 
       Matrix.CreateTranslation((new Vector3(Position, 0)));