У меня есть объект-спрайт в XNA.
У него есть размер, положение и поворот.
Как перевести точку из экранных координат в координаты спрайта?
Спасибо,
SW
Перевод экранных координат в координаты спрайта в XNA
Ответы (4)
Вам может пригодиться следующий пример выбора XNA:
http://creators.xna.com/en-us/sample/picking
Вам нужно рассчитать матрицу преобразования для вашего спрайта, инвертировать ее (теперь преобразование идет из мирового пространства в локальное пространство) и преобразовать положение мыши с помощью инвертированной матрицы.
Matrix transform = Matrix.CreateScale(scale) * Matrix.CreateRotationZ(rotation) * Matrix.CreateTranslation(translation);
Matrix inverseTransform = Matrix.Invert(transform);
Vector3 transformedMousePosition = Vector3.Transform(mousePosition, inverseTransform);
Одно из решений - провести проверку совпадения с исходной невращающейся ограничительной рамкой спрайта. Итак, учитывая вектор 2D экрана (x, y):
- перевести 2D-вектор в локальное пространство спрайтов: (x, y) - (spritex, spritey)
- применить обратное вращение спрайта
- выполнить проверку попадания по ограничивающей рамке
Конечно, проверку попадания можно сделать более точной, если учесть форму спрайта.
Я думаю, это может быть так же просто, как использовать метод Contains на Rectangle, прямоугольник является ограничивающей рамкой вашего спрайта. Я реализовал перетаскивание таким образом в XNA; Я считаю, что Contains тесты основаны на координатах экрана x и y.