2012-03-15 14 views
11

Tengo un juego en 2D en el que utilizo solo el mouse como entrada. ¿Cómo puedo hacerlo para que cuando el mouse pase sobre un objeto Texture2D, el Texture2D y el cursor del mouse cambien y cuando se haga clic en la textura se mueva a otro lugar.2D XNA ratón del juego, haga clic en

En pocas palabras, quiero saber cómo hacer algo cuando sobrevivo o hago clic en un Texture2D.

+0

Esto pertenece en http : //gamedev.stackexchange.com/ – RQDQ

Respuesta

30

En XNA puede usar el Mouse class para consultar la entrada del usuario.

La manera más fácil de hacerlo es verificar el estado del mouse para cada fotograma y reaccionar en consecuencia. ¿La posición del mouse está dentro de un área determinada? Mostrar un cursor diferente ¿Se presiona el botón derecho durante este cuadro? Muestra un menú. etc.

var mouseState = Mouse.GetState(); 

Obtener la posición del ratón en coordenadas de pantalla (en relación con la esquina superior izquierda):

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

Cambiar una textura cuando el ratón está dentro de un área determinada:

Rectangle area = someRectangle; 

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

Haga algo mientras se hace clic con el botón izquierdo del mouse:

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

Recuerde que siempre tendrá información del marco actual. Por lo tanto, aunque pueda pasar algo bueno durante el tiempo en que se presiona el botón, se detendrá tan pronto como se libere.

para comprobar si hay un solo clic usted tendría que almacenar el estado del ratón sobre el último cuadro y comparar lo que ha cambiado:

// 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; 
} 

Usted podría hacerlo aún más avanzada y trabajar con eventos. De modo que seguiría utilizando los fragmentos desde arriba, pero en lugar de incluir directamente el código para la acción, activaría eventos: MouseIn, MouseOver, MouseOut. ButtonPush, buttonPressed, ButtonRelease, etc.

+0

Rectangle.Contains toma un punto por lo que no estoy seguro de por qué convirtió el Point devuelto por Mouse.GetState() a un Vector. – ClassicThunder

+0

muchas gracias, lucius –

+0

, pero ¿cómo puedo asociar el clic con la textura en cualquier posición. cuando lo dejé, hice clic en cualquier posición, ¡no en un rectángulo específico! –

-1

me gustaría añadir que el código Haga clic del ratón podría simplificarse de modo que usted no tiene que hacer una variable para ello:

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

¿Cuál es la relación de esto con la pregunta original? – jeteon

Cuestiones relacionadas