Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: Loncha en Enero 23, 2018, 06:02:05 PM

Título: Problemas con Multi touch
Publicado por: Loncha en Enero 23, 2018, 06:02:05 PM
¡Buenas! Estoy teniendo algunos problemillas con el multi touch, os pongo en contexto:
Estoy intentando programar dos palancas, una se mueve en el eje x y otra en el eje y, he estado buscando por internet como implementar el multi touch con esto y aparentemente funciona, el problema viene de que las palancas se vuelven un poco locas si utilizo un for para comprobar que device (0-4) es el que está activado, dejo el código por aquí.

PALANCA EJE X
for (var i = 0; i< 4; i++){
    distMouse = point_distance(objBasePalanca1.x,objBasePalanca1.y,device_mouse_x(i),device_mouse_y(i))
    dir = point_direction(objBasePalanca1.x,objBasePalanca1.y,device_mouse_x(i),device_mouse_y(i))   

    if device_mouse_check_button(i,mb_left) && position_meeting(device_mouse_x(i),device_mouse_y(i),self){
        bolSeguimiento = true
    }
   
    if device_mouse_check_button_released(i,mb_left){
        bolSeguimiento = false
        bolDisminuir = true
       
    }

    if bolSeguimiento{
        if distMouse < joystickMaxDist{
            x = device_mouse_x(i)
           
        }else{
            x = objBasePalanca1.x + lengthdir_x(joystickMaxDist,dir)
   
        }       
    }else{
        x = objBasePalanca1.x
        y = objBasePalanca1.y
    }
}


PALANCA EJE Y
for (var i = 0; i < 4; i++){
    distMouse = point_distance(objBasePalanca2.x,objBasePalanca2.y,device_mouse_x(i),device_mouse_y(i))
    dir = point_direction(objBasePalanca2.x,objBasePalanca2.y,device_mouse_x(i),device_mouse_y(i))

    if device_mouse_check_button(i,mb_left) && position_meeting(device_mouse_x(i),device_mouse_y(i),self){
        bolSeguimiento = true
    }
   
    if device_mouse_check_button_released(i,mb_left){
        bolSeguimiento = false
        bolDisminuir = true
    }
   
    if bolSeguimiento{
        if distMouse < joystickMaxDist{
            y = device_mouse_y(i)
           
        }else{
            y = objBasePalanca2.y + lengthdir_y(joystickMaxDist,dir)
           
        }       
    }else{
        x = objBasePalanca2.x
        y = objBasePalanca2.y
    }
}


Espero que podáis echarme una mano, me tiene un poco de los nervios.
Título: Re:Problemas con Multi touch
Publicado por: Clamud en Enero 25, 2018, 04:20:23 AM
¿Los bloques de código se ejecutan en los objetos palanca correspondientes o se ejecutan en un objeto aparte?
Título: Re:Problemas con Multi touch
Publicado por: Loncha en Enero 25, 2018, 01:51:40 PM
Se ejecutan directamente en las palancas
Título: Re:Problemas con Multi touch
Publicado por: Loncha en Enero 29, 2018, 05:15:50 PM
¿Nadie puede echarme una mano?
Título: Re:Problemas con Multi touch
Publicado por: Clamud en Enero 29, 2018, 06:42:45 PM
En lugar de usar una base y una palanca, creo que sería más fácil si se usa un solo objeto.

En el evento Create desactiva la detección de doble click como click derecho
[gml]
device_mouse_dbclick_enable(false);
dx = 0; // distancia
dy = 0;
[/gml]

En el evento Step esto podría servir
[gml]
// Palanca Horizontal
dx = 0;
// revisar los 5 puntos táctiles
for (var i=0; i<4; i++)
{
  // si se presiona un punto
  if device_mouse_check_button(i, mb_left)
  {
    // coordenadas del punto
    px = device_mouse_x(i);
    py = device_mouse_y(i);
   
    // si el punto está dentro de esta instancia
    if position_meeting(px, py, id)
    {
      dx = px - x; // distancia en X
      // no rebasar distancia máxima
      if (dx > joystickMaxDist) dx = joystickMaxDist;
    }
  }
}
[/gml]

En el evento Draw dibuja la base y la palanca
[gml]
/// Dibujar palanca
draw_self(); // base
draw_sprite(spr_palanca, 0, x+dx, y+dy);
[/gml]

Si existe una view que se mueve, tal vez sea conveniente cambiar el evento Draw por Draw GUI, y utilizar device_mouse_*_to_gui