Перевод координат экрана в координаты спрайта в XNA - PullRequest
0 голосов
/ 17 декабря 2009

У меня есть объект спрайта в XNA.
Имеет размер, положение и поворот.
Как перевести точку из координат экрана в координаты спрайта?
Спасибо,
SW

Ответы [ 4 ]

3 голосов
/ 05 января 2010

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

Matrix transform = Matrix.CreateScale(scale) * Matrix.CreateRotationZ(rotation) * Matrix.CreateTranslation(translation);

Matrix inverseTransform = Matrix.Invert(transform);
Vector3 transformedMousePosition = Vector3.Transform(mousePosition, inverseTransform);
0 голосов
/ 17 декабря 2009

Я думаю, что это может быть так же просто, как использовать метод Contains для Rectangle, прямоугольник является ограничивающим прямоугольником вашего спрайта. Я реализовал перетаскивание таким образом в XNA; Я считаю, что Contains тесты, основанные на x и y, являются экранными координатами.

0 голосов
/ 17 декабря 2009

Может оказаться полезным следующий образец комплектации XNA:

http://creators.xna.com/en-us/sample/picking

0 голосов
/ 17 декабря 2009

Одним из решений является проверка на удар по оригинальной, не повернутой ограничивающей рамке спрайта. Итак, учитывая вектор экрана 2D (x, y):

  1. преобразование 2D-вектора в локальное пространство спрайтов: (x, y) - (spritex, spritey)
  2. применить обратное вращение спрайта
  3. выполнить проверку удара по ограничительной рамке

Тест на попадание, конечно, можно сделать более точным, учитывая форму спрайта.

...