Масштабирование спрайтов XNA - PullRequest
0 голосов
/ 07 ноября 2010

Когда я использую метод SpriteBatch.Draw(), я могу получить вертикальное или горизонтальное масштабирование. Например:

new Vector2(1.0f, 2.0f) 

это означает, что мой спрайт расширит ось Y. Как я могу получить его по диагонали (например, 45 или 70 градусов)?

(Обновление из комментариев)

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

Это изображение из игры World Of Goo:

Picture from World Of Goo game

1 Ответ

1 голос
/ 07 ноября 2010

Сначала масштабируйте его по горизонтали, а затем по вертикали. Если он равен 45 градусам, вы будете масштабировать одинаково в обоих направлениях, если вы используете другой угол, вы можете вычислить шкалы, используя простые функции sin / cos.

EDIT:

C # пример:

float angle = 70; // Direction in degrees
float amount = 1;  // By how many percent (1 = 100 %)
float radAngle = (angle / 180) * Math.PI;
float xratio = (1 + Math.cos(radAngle)) * amount;
float yratio = (1 + Math.sin(radAngle)) * amount;
// Then just make a new Vector2(xratio, yratio)

Остерегайтесь ошибок в этом примере, я не проверял это. Разве вам не будет проще растянуть спрайт, используя Vector2 напрямую?

SpriteBatch.Draw(/* Some stuff */, new Vector2(2.0, 3.0), /* some more stuff */);  // Scale 2x in horizontal and 3x in vertical direction
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...