Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: quiero aprender en Abril 17, 2015, 05:27:15 AM

Título: Hilera de balas [Resuelto]
Publicado por: quiero aprender en Abril 17, 2015, 05:27:15 AM
Hola, Que tal.
He estado creando un juego de disparos pero tengo que al apretar un joystick dispare pero la cosa es que, cuando le apretó sale una hilera de balas y no quiero eso quiero que como cada 2 segundos vuelva a disparar pero no me sale. A por cierto lo de disparar lo tengo en un evento step y es necesario que permanezca ahí el código en step.

Gracias por tu respuesta.
Título: Re:Hilera de balas
Publicado por: penumbra en Abril 17, 2015, 05:46:05 AM
Una manera es usar una alarma para controlar el tiempo de retraso entre disparo. Aquí hay un ejemplo, fíjate en cómo se maneja la variable "poder_disparar"

http://www.comunidadgm.org/preguntas-y-respuestas/como-seria-esto-en-codigo/msg94203/#msg94203 (http://www.comunidadgm.org/preguntas-y-respuestas/como-seria-esto-en-codigo/msg94203/#msg94203)
Título: Re:Hilera de balas
Publicado por: Iros en Abril 17, 2015, 05:48:50 AM
A mi me pasó lo mismo, lo solucioné creando una variable auxiliar y poniendo el condicional en una alarma.

Evento Create:
[gml]canShoot = false;[/gml]

Evento Step:
[gml]
if (joystick_check_button(1,1)) {
   alarm[0] = 10;
}

if (canShoot) {
    instance_create(x,y,objBullet);
}
[/gml]

Evento Alarm 0:
[gml]
if (cantShoot == false) {
   canShoot = true;
   alarm[0] = room_speed * 2;
} else {
   canShoot = false;
}
[/gml]
Título: Re:Hilera de balas
Publicado por: quiero aprender en Abril 17, 2015, 06:12:22 AM
Gracias por responder pero aun no lo logro. No me refiero al joystick de game maker con código, el juego que estoy creando será para móvil y el joystick es creado por mi, Bueno con ayuda de NiuWeb

El código que tengo en el evento step.

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

with obj_jugador
{
   direction = global.dir2
   image_angle = global.dir2
   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
}

gracias por tu respuesta.
Título: Re:Hilera de balas
Publicado por: Iros en Abril 17, 2015, 06:21:15 AM
¿Por qué mejor no usas Virtual Keys (http://docs.yoyogames.com/source/dadiospice/002_reference/mouse,%20keyboard%20and%20other%20controls/virtual%20keys/index.html) y te ahorrás varios problemas?
Título: Re:Hilera de balas
Publicado por: quiero aprender en Abril 17, 2015, 05:38:24 PM
Porque el juego que estoy haciendo necesita moverse a todas las direcciones y el joystick de shoot también.

El juego es un shooster en 2d vista arriba.

Por eso es necesario.

Espero tu respuesta, Muchas gracias.
Título: Re:Hilera de balas
Publicado por: Iros en Abril 17, 2015, 06:21:48 PM
Podes poner todo el contenido del primer IF (dragg == 1) dentro de una alarma quedandote algo así:

[gml]
if dragg==1
{
alarm[0] = 10;
}
if dragg==1 && device_mouse_check_button_released(dragg_id,mb_left)
{
dragg=0
dragg_id=0
}
[/gml]

Evento Alarm 0:
[gml]
if (dragg == 1) {
    direction = point_direction(x,y,device_mouse_x(dragg_id),device_mouse_y(dragg_id))
    global.dir2 = direction

    with obj_jugador {
           direction = global.dir2
           image_angle = global.dir2
           instance_create(x,y,obj_bala)
    }
    image_angle=global.dir2
    alarm[0] = room_speed * 2; //Se ejecuta la alarma cada 2 segundos para generar el disparo.
}
[/gml]
Título: Re:Hilera de balas
Publicado por: quiero aprender en Abril 18, 2015, 08:06:06 PM
Gracias por tu respuesta pero a un no lo soluciono, con el código que me diste ala momento de tocar el joystick no se mueve a la dirección de  jugador para disparar y tampoco dispara, que hago,

Título: Re:Hilera de balas
Publicado por: quiero aprender en Abril 18, 2015, 08:27:14 PM
HOLA!
YA LO RESOLVI HEEEEEEEEEEEEEEEEEE

Gracias a todos los que me ayudaron me dieron una idea de como hacerlo, el código que utilice fue este.

En el evento créate:
dispara=true;

evento step:
if dragg=1
{
if dispara=true{alarm[0]=10 dispara=false}
direction = point_direction(x,y,device_mouse_x(dragg_id),device_mouse_y(dragg_id))
    global.dir2 = direction
    with obj_jugador{
    direction = global.dir2
    image_angle = global.dir2
    }
    image_angle=global.dir2
}
if dragg=1 && device_mouse_check_button_released(dragg_id,mb_left)
{
dragg=0
dragg_id=0
}

y en la alarm[0]

instance_create(obj_jugador.x,obj_jugador.y,obj_bala)
dispara=true;

Gracias de ante mano.
Título: Re:Hilera de balas [Resuelto]
Publicado por: penumbra en Abril 18, 2015, 08:30:25 PM
Exactamente, después de comprobar que se pueda disparar, tienes que lanzar la alarma y cambiar la variable a false. Bien hecho.