Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: matiascarpello en Agosto 28, 2013, 02:09:25 PM

Título: (Ayuda) Desactivar un segundo joystick
Publicado por: matiascarpello en Agosto 28, 2013, 02:09:25 PM
Hola comunidad. Tengo un problema ya que me esta llevando bastante solucionarlo y no puedo.

Si miras este video, veras que implementaron un joystick virtual, Es espectacular.



Aquí les dejo el link para que bajen el proyecto y me puedan ayudar.
https://mega.co.nz/#!DRcwGIRB!Z8M4iU0vd6MynT97ctAgMD-fyKsEfsBRHzGhhgnePdw (https://mega.co.nz/#!DRcwGIRB!Z8M4iU0vd6MynT97ctAgMD-fyKsEfsBRHzGhhgnePdw)

El problema es que cuando se toca la pantalla del lado izquierdo se mueve un cuadrado y cuando se toca la pantalla del lado derecho se mueve otro cuadrado.

Yo lo que quiero es tocar en cualquier parte de la pantalla y mover un solo personaje.

Ya logre desactivar el Joystick del lado derecho, por lo que ahora me queda el del lazo izquierdo, pero necesito activarlo en toda la pantalla, no solo en el lado izquierdo.

¿Se preguntaran? ¿Porque este sistema de Joystick? Bueno, porque el juego es en Android y se fascilita el manejo del personaje con esto.

¿Pueden darme una mano?

Título: Re:(Ayuda) Desactivar un segundo joystick
Publicado por: petpan13 en Agosto 28, 2013, 09:32:09 PM
en objeto jostic en step camnibiar una de las variables esta rad y lad aqui puse las dos rad y solo mueve el azul gracias por tu ejemplo esta chulo

for (i=0;i<4;i += 1)
{
//   Check for first touch
if device_mouse_check_button_pressed(i,mb_left)
    {
        if device_mouse_raw_x(i) < window_get_width()/2
        {
            left_device_id=i
            left_start_x=device_mouse_raw_x(i)
            left_start_y=device_mouse_raw_y(i)
               
        }
        else
        {
            right_device_id=i
            right_start_x=device_mouse_raw_x(i)
            right_start_y=device_mouse_raw_y(i)
        }
    }
}

// check mouse move

if left_device_id > -1
{
    left_analog_direction = radtodeg(arctan2((device_mouse_raw_y(left_device_id)-(left_start_y)),(device_mouse_raw_x(left_device_id)-(left_start_x)+.000001)));
    left_analog_distance = sqrt(sqr(device_mouse_raw_x(left_device_id)-(left_start_x))+sqr(device_mouse_raw_y(left_device_id)-(left_start_y)));;

}
if right_device_id > -1
{
    right_analog_direction = radtodeg(arctan2((device_mouse_raw_y(right_device_id)-(right_start_y)),(device_mouse_raw_x(right_device_id)-(right_start_x)+.000001)));
    right_analog_distance = point_distance(right_start_x,right_start_y,device_mouse_raw_x(right_device_id),device_mouse_raw_y(right_device_id))

}

str=""
// check for release

if device_mouse_check_button_released(right_device_id,mb_left)
{
    right_device_id=-1
    right_analog_direction = -1
    right_analog_distance = -1
}

if device_mouse_check_button_released(left_device_id,mb_left)
{
    left_device_id=-1
    left_analog_direction=-1
    left_analog_distance = -1
}

// Set variables for all objects to use
lad=-1
rad=-1
if abs(left_analog_distance) > 15
{
    rad=point_direction(left_start_x,left_start_y,device_mouse_raw_x(left_device_id),device_mouse_raw_y(left_device_id))
}

if abs(right_analog_distance) > 15
{
    rad=point_direction(right_start_x,right_start_y,device_mouse_raw_x(right_device_id),device_mouse_raw_y(right_device_id))

}
Título: Re:(Ayuda) Desactivar un segundo joystick
Publicado por: matiascarpello en Agosto 28, 2013, 09:54:53 PM
Funciona, eres un genio, una sola cosa más, como podría asignar sprites cuando valla a la izquierda, derecha, abajo, arriva?

Lo que pasa es que jamás asigne sprites para este tipo de joystick
Título: Re:(Ayuda) Desactivar un segundo joystick
Publicado por: matiascarpello en Agosto 29, 2013, 01:24:25 AM
Encontre un error o bug y no se como solucionarlo, si te fijas por ejemplo al movert hacia la derecha el cuadrado de mueve perfectamente, pero si tenes el gatollo mantenido hacia la derecha llega un punto en el que el cuadrado deja de moverse y en unos segundos vuelve a moverse, es como si hiciera una pausa.
Título: Re:(Ayuda) Desactivar un segundo joystick
Publicado por: petpan13 en Agosto 29, 2013, 02:06:32 PM
mire lo del bug elimine la variable lad pero no funciono elimine el cuadrado rojo el objeto y entonces manejando solo el azul comprobe que se queda atrancado abria que depura el codigo de moviento tendra algun limite o colision o algo asi lo del sprite en el string con sprite index creo que se puede hacer no lo probe
Título: Re:(Ayuda) Desactivar un segundo joystick
Publicado por: petpan13 en Agosto 29, 2013, 03:39:41 PM
valla tela si pones lad en vez de rad no se genera el bug y todo funciona como debiera manda guasa la cosa le di 20 ueltas y al final era tan facil como eso .


En cuanto al cambio de sprite con el movimiento sprite_index=tu sprite

en el objeto red player en step


// Red player uses left joystick
lad=-1
lad=obj_GlobalJoystick.lad

lad=GetDirection(lad)

switch lad
{
    case d_Up:
         {
          if y -5 > 0 {y -=5aqui };break;
         }
    case d_Down:
         {
          if y +5 < room_height {y +=5aqui};break;     
         }
    case d_Left:
         {
          if x -5 > 0 {x -=5aqui} ;break;       
         }
    case d_Right:
         {
          if x +5 < room_width {x +=5aqui} ;break;       
         
         }
}
Título: Re:(Ayuda) Desactivar un segundo joystick
Publicado por: matiascarpello en Agosto 29, 2013, 05:03:38 PM
Cita de: petpan13 en Agosto 29, 2013, 03:39:41 PM
valla tela si pones lad en vez de rad no se genera el bug y todo funciona como debiera manda guasa la cosa le di 20 ueltas y al final era tan facil como eso .


En cuanto al cambio de sprite con el movimiento sprite_index=tu sprite

en el objeto red player en step


// Red player uses left joystick
lad=-1
lad=obj_GlobalJoystick.lad

lad=GetDirection(lad)

switch lad
{
    case d_Up:
         {
          if y -5 > 0 {y -=5aqui };break;
         }
    case d_Down:
         {
          if y +5 < room_height {y +=5aqui};break;     
         }
    case d_Left:
         {
          if x -5 > 0 {x -=5aqui} ;break;       
         }
    case d_Right:
         {
          if x +5 < room_width {x +=5aqui} ;break;       
         
         }
}

Funciona perfecto, ahora una última consulta y no molesto más, puedo darle total movimiento con la palanca? porque solo gira en izquierda, derecha, arriva y abajo, pero si quiero un control total? como un 360ª
Título: Re:(Ayuda) Desactivar un segundo joystick
Publicado por: petpan13 en Agosto 29, 2013, 06:05:15 PM
no es molestia supongo que te refiere a las diagonales no que el sprite gire eso para acerlo ahi que modificar el scrip det direction y agregarlas el diagona der abajo der arriba y izq aarri izq abajo

despues tb modificar el step en el objeto para añadorlo tb