XNA растягивающий спрайт - PullRequest
       17

XNA растягивающий спрайт

0 голосов
/ 09 сентября 2011

Я бы хотел растянуть спрайт в зависимости от направления движения / скорости.для простоты спрайт белый 5х5 пикселей.включая черную границу 1x1

Так, например, если спрайт перемещается из текущего местоположения в направлении «3 часов», он растягивается / масштабируется как тонкая линия по диагонали, аналогично любому другому углу / радиану на основе случайного движения.

Я попытался взять: vector2 position - исходное положение, а затем использовать его с: length () для значений масштаба x и y, но это приводит к созданию блоков большого масштаба, а не линии?

Есть идеи??по масштабированию и расчету угла направления

Пол.

Ответы [ 3 ]

2 голосов
/ 12 ноября 2012

Это было некоторое время назад, поэтому, возможно, не очень полезно первоначальному человеку, который сделал запрос.Но у вас есть три варианта.Одним из них является использование Draw (Texture2D, Rectangle, ...) вместо Draw (Texture2D, Vector2 ...).Vector2 просто устанавливает координаты x и y, поэтому, если вы измените размер с помощью этого метода, вы измените размер спрайта в целом.Прямоугольник содержит значения X, Y и отдельные значения высоты и ширины, поэтому с помощью прямоугольника можно изменить размер вдоль одной оси.У вас все еще будет проблема с концами, но это можно исправить, рассматривая концы как отдельные спрайты.Я использую этот метод для границ переменного размера.

Второй, который будет работать в случае простого спрайта, как вы описываете, - это создание текстуры во время выполнения.Создайте новый Texture2D нужного размера, затем создайте массив цветов, достаточно большой, чтобы покрыть каждый пиксель, и назначьте этот массив, используя .SetData (Color []).С этим связано немало вычислительных затрат, но я использовал его для выделения ограничивающего прямоугольника переменного размера во время выполнения, поэтому он работает нормально.

Конечно, опция примитивов тоже выглядит хорошо.:)

0 голосов
/ 11 сентября 2011

Пожалуйста, четко сформулируйте свой вопрос.Не могли бы вы загрузить какие-либо скриншоты?Однако, насколько я понимаю, вы должны масштабировать спрайт в направлении X, используя формулу расстояния, а затем вращать его, используя обратную функцию tan.

0 голосов
/ 09 сентября 2011

Я думаю, вам нужно создать несколько спрайтов для отображения строки.Вам понадобятся переходные спрайты для внутренних участков линии и спрайты для конечных точек.

...