Arrastrar y Soltar objetos – XNA


Drag and Drop – XNA:

Voy a mostrarles un pequeño ejemplo de como usar el arrastrar y soltar para algunos objetos, pueden usarlos en juegos donde se requiera seleccionar el objeto y arrastrarlo a una zona determinada.

Para saber sí el Mouse ha seleccionado el objeto, verificamos que las coordenadas del Mouse se encuentren en la posición que ocupa la imagen, para eso usamos la siguiente función que recibe como parámetro un rectángulo que es el tamaño de la imagen y las coordenadas del Mouse:

Boolean clic_Item(Rectangle rect, int x, int y)
{
  return (x >= rect.X &&
            x <= rect.X + rect.Width &&
            y >= rect.Y &&
            y <= rect.Y + rect.Height);
}

Después de saber si el Mouse se encuentra sobre la imagen, debemos verificar que tenga uno de los botones presionados, en este caso el clic izquierdo, y asignarle la nueva posición a la imagen.
Es algo sencillo, en este caso además de ubicar la imagen a la posición del Mouse mientras este se encuentra presionado, le he cambiado el color a la imagen para darle una sensación de transparencia mientras se arrastra.

Adjunto el código completo: Aquí

10 pensamientos en “Arrastrar y Soltar objetos – XNA

  1. Esta bien, pero tambien puedes hacer lo siguiente:
    Con la coordenada del raton te creas un nuevo Point. Y luego haces:

    ractangle.Contains(punto)

    Quedaria algo asi:

    Point posRaton = new Point(Mouse.GetState().X, Mouse.GetState().Y);
    if (rectangulo.Contains(posRaton))

    En terminos de eficiencia es peor que tu solucion, pero creo que es más claro a la hora de leer, sobre todo para gente que no tiene mucha experiencia en esto de XNA.

    Un saludo

  2. hola mira no se has visto el video juego de county fair crockshot
    bueno me dejaron eso de proyecto pero la verdad no se como hacer lo de los contadores :S para las vidas el score y todo eso

    me podrias ayudar 😀

  3. Hola. Tengo una duda.
    He realizado esta funcion con exito sin problemas.
    Pero yo lo que quiero es un acelerador como si fuera un componente Slider vertical del Visual Studio. (como un acelerador de un avion visto de arriba)
    Ya yo logre que el drag & drog solo se mueva verticalmente.
    Lo que no puedo lograr es que solo se mueva entre los rangos slider.position.y a slider.position.y+100.
    No se si me hago entender.
    gracias, buen aporte

  4. Hombre, ya he guardado esa pagina en favoritos para un futuro porque es justamente lo que estoy buscando.
    Pero en realidad esta muy grande y tiene demasiadas clases y cosas ese metodo y hace muchas cosas mas de las que pido.
    Yo ya habia resuelto con este que posteastes.
    Modificando esta linea:
    ..
    MouseImagenClick = new Vector2(ThrottleStick.Position.X, my – ThrottleStick.Position.Y);
    ..

    y esta otra
    ..
    ThrottleStick.Position = new Vector2(ThrottleStick.Position.X, my – MouseImagenClick.Y);
    ..

    Asi solo se mueve verticalmente que es lo que busco.
    El problema son los topes:

    Si agrego por el ejemplo al tope de arriba esta linea:
    ..
    if (presionado && ThrottleStick.Position.Y < 604)
    ..
    Esto si, perfectamente no deja mover la palanca por encima de mi tope de arriba. Pero no se por que motivo se para la palanca en 603 y ya ni sube ni baja con el mouse.

    he puesto este codigo en cuanto sueltas el boton y sin resultado:
    ..
    if (ThrottleStick.Position.Y <= 603) ThrottleStick.Position.Y = 604;

Deseas comentar o sugerir algo?

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s