Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: yokaiworld en Noviembre 16, 2015, 08:36:58 PM

Título: Que un personaje lanze un golpe haga una pausa y vuelva a lanzar otro
Publicado por: yokaiworld en Noviembre 16, 2015, 08:36:58 PM
Que un personaje lance un golpe haga una pausa y vuelva a lanzar otro, si se encuentra a cierta distancia
if distance_to_object(obj_player1)<= 150
lanzar golpe
hace pausa
si se encuentra en rango lanzar otro golpe y asi sucesivamente
gracias
Título: Re:Que un personaje lanze un golpe haga una pausa y vuelva a lanzar otro
Publicado por: nonoroman en Noviembre 16, 2015, 09:18:07 PM
Para cosas asi yo suelo utilizar las alarmas.

Echale una ojeada al tema de las alarmas.

Deberia de hacer algo asi;

if distance_to_object(obj_player1)<= 150
lanzar golpe
alarm[0] = 60;

y dentro de la alarma, vuelve a comprobar la condicion y a lanzar el otro golpe.

Pruebalo, deberia de funcionarte.

Cita de: yokaiworld en Noviembre 16, 2015, 08:36:58 PM
Que un personaje lance un golpe haga una pausa y vuelva a lanzar otro, si se encuentra a cierta distancia
if distance_to_object(obj_player1)<= 150
lanzar golpe
hace pausa
si se encuentra en rango lanzar otro golpe y asi sucesivamente
gracias
Título: Re:Que un personaje lanze un golpe haga una pausa y vuelva a lanzar otro
Publicado por: yokaiworld en Noviembre 16, 2015, 09:44:27 PM
gracias por responder desde step  llamo una alarma
pero no logro crear una pausa sino que tira golpes como loco y no logro hacer que se detenga algien puede poner un ejemplo
Título: Re:Que un personaje lanze un golpe haga una pausa y vuelva a lanzar otro
Publicado por: penumbra en Noviembre 16, 2015, 09:55:42 PM
Cita de: yokaiworld en Noviembre 16, 2015, 09:44:27 PM
gracias por responder desde step  llamo una alarma
pero no logro crear una pausa sino que tira golpes como loco y no logro hacer que se detenga algien puede poner un ejemplo
Indica qué código usas
Título: Re:Que un personaje lanze un golpe haga una pausa y vuelva a lanzar otro
Publicado por: yokaiworld en Noviembre 16, 2015, 10:17:34 PM
en step
if distance_to_object(obj_player1)<= 150 and obj_player2.onground = true
{alarm[5]=1
if distance_to_object(obj_player1) <= 80 {speed=0;}}

if distance_to_object(obj_player1) > 150
{alarm[5]=0}


alarm[5]
randomize()
accion=choose(1,2,3,4);
if accion=1
{
alarm[6]=6;
}

if accion=2
{
alarm[7]=6;
}

if accion=3
{
alarm[8]=6;
}

if accion=4
{
alarm[9]=6;
}


alarm[6]
cus=1
if distance_to_object(obj_player1)<=150 and cus=1 and obj_player2.onground = true
{image_speed = 0.5
sprite_index = jab
}

if sprite_index == jab
{if image_index >= image_number -1
{
alarm[5]=1
cus=0
}}

cada alarma tiene un sprite diferente y no funciona muy bien no se como hacer una pausa entre golpes gracias


Título: Re:Que un personaje lanze un golpe haga una pausa y vuelva a lanzar otro
Publicado por: penumbra en Noviembre 16, 2015, 10:48:21 PM
Citarif distance_to_object(obj_player1) > 150
{alarm[5]=0}
Si lo que quieres es que al alejarse del jugador, ya no se lance un golpe, entonces deberías igualar a -1 la alarma5 en lugar de hacerla 0. Un -1 indica que la alarma se ha parado y ya no corre más. El 0 no significa que la alarma este detenida.

Citarif sprite_index == jab
{if image_index >= image_number -1
{
alarm[5]=1
cuxs=0
}}
Este código no debería estar dentro de una alarma, esto debería ir en STEP, porque no se sabe en qué momento exacto el sprite va a llegar a su última subimagen. Generalmente no es útil recurrir a un evento de alarma para determinar si la animación ha terminado. En este caso, en el mismo paso, estás indicando que arranque una animación, y preguntando si se ha llegado al final de esa animación, lo cuál difícilmente va a suceder. En el primer if, después de sprite_index = jab deberías usar image_index = 0 para asegurar que el golpe/ataque siempre comience desde la subimagen 0.

Por último, cuando se comprueba que la animación llega a su última subimagen, ese alarm[5] = 1 va a estropear tu lógica, porque el ataque apenas ha terminado, y tú estas arrancando otra vez la alarma (al siguiente STEP) para volver a atacar, es decir, no hay espera.

Lo que yo haría sería usar algo parecido a:
[gml]
cus=1
if distance_to_object(obj_player1)<=150 and cus=1 and obj_player2.onground = true and (atacar)
{
     image_speed = 0.5
     sprite_index = jab
     image_index = 0
     atacar = false                        // Bandera para controlar si se puede atacar
     alarm[0] = room_speed * 4      //Esperar 4 segundos para volver a atacar
}
[/gml]

Y en alarm[0]
[gml]atacar = true[/gml]
Título: Re:Que un personaje lanze un golpe haga una pausa y vuelva a lanzar otro
Publicado por: yokaiworld en Noviembre 17, 2015, 10:16:09 PM
disculpa penumbra pero este codigo va en step o en otra alarma?

cus=1
if distance_to_object(obj_player1)<=150 and cus=1 and obj_player2.onground = true and (atacar)
{
     image_speed = 0.5
     sprite_index = jab
     image_index = 0
     atacar = false                        // Bandera para controlar si se puede atacar
     alarm[0] = room_speed * 4      //Esperar 4 segundos para volver a atacar
}
Título: Re:Que un personaje lanze un golpe haga una pausa y vuelva a lanzar otro
Publicado por: penumbra en Noviembre 17, 2015, 10:31:38 PM
Ese código va en las alarmas que usas para cambiar el sprite de ataque, creo que son las alarmas de la 6 a la 9. La variable cus no sé para qué la uses, pero creo que la puedes quitar de la condición. La variable atacar es conveniente que la inicies en CREATE como atacar = true para que pueda atacar la primera vez