Перевод экранных координат в координаты спрайта в XNA

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


person Shachar Weis    schedule 16.12.2009    source источник
comment
Не уверен, о чем вы спрашиваете. Положение спрайта в координатах экрана, не так ли?   -  person Ryan Lundy    schedule 17.12.2009
comment
Я хочу перевести щелчок мыши по экрану в X / Y изображения спрайта (если щелчок находится внутри спрайта).   -  person Shachar Weis    schedule 17.12.2009


Ответы (4)


Вам может пригодиться следующий пример выбора XNA:

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

person rysama    schedule 17.12.2009

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

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

Matrix inverseTransform = Matrix.Invert(transform);
Vector3 transformedMousePosition = Vector3.Transform(mousePosition, inverseTransform);
person Tom Gillen    schedule 05.01.2010

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

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

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

person Peter Lillevold    schedule 17.12.2009

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

person Ryan Lundy    schedule 17.12.2009
comment
Но учитывает ли ограничивающая рамка поворот спрайта? - person Peter Lillevold; 18.12.2009