2009-10-02 2 views
1

Я использую Sprites для рисования изображений в окне D3D. Я рисую изображение на каждом спрайте внутри прямоугольника (0, 0, ширина, высота) и использую Matrix.Transformation2D для размещения изображения в визуализированном представлении.Обнаружение щелчка мыши и преобразование2D в Direct3D

Пример:

using (Sprite s = new Sprite(device)) 
    { 
     s.Begin(SpriteFlags.AlphaBlend); 
     Matrix tranz = new Matrix(); 
     tranz = 
     Matrix.Transformation2D(new Vector2(0, 0), 0.0f, 
      new Vector2(scale, scale), 
      new Vector2(0, 0), Geometry.DegreeToRadian(angle), 
      new Vector2(positionX, positionY)); 

     s.Transform = tranz; 

     Vector3 spriteCenter = new Vector3(0.0f, 0.0f, 0.0f); 
     Vector3 sprPosition = new Vector3(0.0f, 0.0f, 0.0f); 

     s.Draw(someTexture, new Rectangle(0, 0, width, height), 
     spriteCenter, sprPosition, 
     Color.FromArgb(0xff, 255, 255, 255)); 
     s.End(); 
    } 

Как я могу определить, что определенный образ был нажат?

Известные параметры: 1. Позиция мыши: mouseX, мышиный 2. Все transformation2D параметры 3. Размер и положение изображения внутри спрайта.

Этого должно быть достаточно данных, чтобы получить то, что я хочу, но я понятия не имею, что делать.

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

ответ

1

Вы должны быть в состоянии сделать это, используя matrix.Invert(). Псевдокод:

Foreach sprite 
    Matrix inverse = tranz.Invert() 
    objectCoords = mouseCoords * inverse; 
    if (objectCoords in (0,0,width, height)) 
     return sprite 

return null; 
Смежные вопросы