¡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.
¿Los bloques de código se ejecutan en los objetos palanca correspondientes o se ejecutan en un objeto aparte?
Se ejecutan directamente en las palancas
¿Nadie puede echarme una mano?
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