Hola.
Me podrían decir como crear un joystick para un juego de disparos en 2d, ya e intentado varias cosas pero no logro hacerlo.
Es que quiero poner un joystick en la esquina inferior que al presionarlo el jugador de mueva a la dirección y mire hacia ese lado, no quiero que tenga solo la posibilidad de moverse en 4 direcciones sino en todas las posibles y también un botón que al presionarlo dispare a la dirección de la vista del jugador. Espero haberme expresado bien :)

gracias por tu respuesta.

Amigo, es muy sencillo, solo creas unos objetos (el de moverse, el de disparar y un controlador):

oButtonMove = El joystick de movimiento
oButtonShoot = El boton de disparar
oMultiTouch = El Controlador

(Los nombres son los que quieras)


en el oMultiTouch colocas un evento Step y escribes esto:


Step Event:

for(i=0;i<5;i+=1)
{
if device_mouse_check_button_pressed(i,mb_left)
{
if device_mouse_x(i)<(room_width/2) //Espacio Disponible para activar el Joystick de movimiento
   {
   oButtonMove.dragg=1;
   oButtonMove.dragg_id=i;
   }
   else //El sector disponible para activar el Joystick de disparo
   {
   oButtonShoot.dragg=1;
   oButtonShoot.dragg_id=i;
   }
}
}




Ahora vamos con los Controles

En ambos objetos (oButtonMove & oButtonShoot) crearemos un objeto create con estas variables:


dragg=0//Esta Activado?
dragg_id=0 //id del dedo que lo activa



pero en el evento Create del objeto oButtonMove agregaremos otra variable mas:

global.Dir = 0 que significa la direccion que el oPlayer toma de acuerdo a la direccion que tenga el joystick

¡¡RECUERDA QUE DEBES TENER LOS SPRITES DEL JOYSTICK Y EL BOTON DE DISPARO, pueden ser un circulo grande para el oButtonMove y uno pequeño para el oButtonShoot  ;D

sigamos...
En el evento Step de oButtonMove ponemos
if dragg=1
{
direction = point_direction(x,y,device_mouse_x(dragg_id),device_mouse_y(dragg_id))
global.Dir = direction

with oPlayer
{
   direction = global.Dir
   image_angle = direction
   speed = 4 //Speed
}
}
if dragg=1 && device_mouse_check_button_released(dragg_id,mb_left)
{
dragg=0
dragg_id=0
speed = 0
}



y en el oButtonShoot en el evento Step:

if dragg=1
{
with oPlayer
{
   instance_create(x,y,oBullet)
     with oBullet
      {
        direction = global.Dir
        image_angle = direction
        speed = 18
      }
}
}

if dragg=1 && device_mouse_check_button_released(dragg_id,mb_left)
{
dragg=0
dragg_id=0
}




y los pones dentro del area tactil de cada uno (En este caso: oButtonMove va entra la primera mitad de la room y oButtonShoot en la otra)


te aclaro que oPlayer y oBullet representan al jugador y a la bala

dudas o inquietudes aqui:  http://niuweb.hol.es
alaberga regué el café.

BA:STFW&RTFM

Lo voy a intentar luego te digo si funciono. Gracias por responder :)

#3 Abril 16, 2015, 06:28:04 PM Ultima modificación: Abril 16, 2015, 06:42:13 PM por quiero aprender
Hola he cambiado el código un poco para mis necesidades pero la cosa es que cuando muevo el joystick de mover y lo suelto el jugador camina solo aun que yo no lo este tocando
Este es el código que utilizo en el de mover.

if dragg=1
{
direction = point_direction(x,y,device_mouse_x(dragg_id),device_mouse_y(dragg_id))
global.dir = direction

with obj_jugador
{
   direction = global.dir
   speed = 5 //Speed
   
}
}
if dragg=1 && device_mouse_check_button_released(dragg_id,mb_left)
{
dragg=0
dragg_id=0
speed = 0
}

Aclaro que cuando tu me pasaste el código lo deje tal y como estaba pero aun tenia el problema.

Espero tu respuesta. Gracias.

A ya lo solucione.  :o

Pero cuando presiono el joystickshoot me dispara una hilera de balas como le hago, el código que utiliso en el evento step es este, el del evento créate es el mismo.

if dragg=1
{
var direction2;
direction2 = point_direction(x,y,device_mouse_x(dragg_id),device_mouse_y(dragg_id))
global.dir2 = direction2
with obj_jugador
{
   instance_create(x,y,obj_bala)
   image_angle = global.dir2
}
}

if dragg=1 && device_mouse_check_button_released(dragg_id,mb_left)
{
dragg=0
dragg_id=0
}