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.
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)
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]
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.
¿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?
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.
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]
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,
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.
Exactamente, después de comprobar que se pueda disparar, tienes que lanzar la alarma y cambiar la variable a false. Bien hecho.