2012-03-15 12 views
11

Ho un gioco 2D in cui uso solo il mouse come input. Come posso fare in modo che il mio quando il mouse passa sopra un oggetto Texture2D, Texture2D e il cursore del mouse cambiano, e quando si fa clic sulla texture si sposta in un altro punto.2D XNA game mouse click

In poche parole, voglio sapere come fare qualcosa quando passo il mouse su o su un Texture2D.

+0

è offerto su http : //gamedev.stackexchange.com/ – RQDQ

risposta

30

In XNA è possibile utilizzare Mouse class per interrogare l'input dell'utente.

Il modo più semplice per farlo è quello di controllare lo stato del mouse per ogni fotogramma e reagire di conseguenza. La posizione del mouse è all'interno di una determinata area? Mostra un cursore diverso. Il pulsante destro è premuto durante questo frame? Mostra un menu. ecc

var mouseState = Mouse.GetState(); 

ottenere la posizione del mouse in coordinate dello schermo (relativamente all'angolo in alto a sinistra):

var mousePosition = new Point(mouseState.X, mouseState.Y); 

Change una texture quando il mouse si trova all'interno di una certa area:

Rectangle area = someRectangle; 

// Check if the mouse position is inside the rectangle 
if (area.Contains(mousePosition)) 
{ 
    backgroundTexture = hoverTexture; 
} 
else 
{ 
    backgroundTexture = defaultTexture; 
} 

Fai qualcosa mentre fai clic con il pulsante sinistro del mouse:

if (mouseState.LeftButton == ButtonState.Pressed) 
{ 
    // Do cool stuff here 
} 

Ricorda però che avrete sempre le informazioni della corrente telaio . Quindi, mentre qualcosa di interessante può accadere durante il tempo in cui il pulsante viene cliccato, si fermerà non appena rilasciato.

Per verificare la presenza di un solo clic si dovrà memorizzare lo stato del mouse del l'ultimo fotogramma e confrontare ciò che è cambiato:

// The active state from the last frame is now old 
lastMouseState = currentMouseState; 

// Get the mouse state relevant for this frame 
currentMouseState = Mouse.GetState(); 

// Recognize a single click of the left mouse button 
if (lastMouseState.LeftButton == ButtonState.Released && currentMouseState.LeftButton == ButtonState.Pressed) 
{ 
    // React to the click 
    // ... 
    clickOccurred = true; 
} 

Si potrebbe rendere ancora più avanzato e lavorare con gli eventi. Così si sarebbe comunque utilizzare i frammenti dall'alto, ma invece di includere direttamente il codice per l'azione che avrebbe sparato eventi: mouseIn, MouseOver, mouseout. ButtonPush, ButtonPressed, ButtonRelease, ecc

+0

Rectangle.contains prende un punto, quindi non sono sicuro perché è stato convertito il punto restituito da Mouse.GetState() per un vettore. – ClassicThunder

+0

grazie mille, Lucius –

+0

Ma come posso associare il clic con la texture in qualsiasi posizione. quando ho lasciato cliccato in qualsiasi posizione non un rettangolo specifico! –

-1

Vorrei solo aggiungere che il codice Clic del mouse potrebbe essere semplificata in modo che non c'è bisogno di fare una variabile per esso:

if (Mouse.GetState().LeftButton == ButtonState.Pressed) 
    { 
     //Write code here 
    } 
+0

Qual è il rapporto di questo con la domanda originale? – jeteon