Hola a todos, necesito vuestra ayuda otra vez. Estoy intentando hacer un juego de plataformas y soy muy torpe con esto, voy progresando poco a poco. Ahora lo que estoy intentando hacer es que el sprite del jugador parpadee cuando recibe un golpe. He conseguido que al ser golpeado esté un tiempo invulnerable (lo conseguí gracias a vuestra ayuda ;D), pero llevo un tiempo intentando que el sprite parpadee durante el tiempo que es invulnerable y también había pensado que rebotara un poco al colisionar contra el enemigo, hasta ahora no lo he conseguido :'( . Necesito ayuda, no se como hacerlo.
Este es el codigo que tengo (en el Step del Jugador) cuando choca con un objeto como pinchos,...
//Colisión contra un Objeto dañino
if (place_meeting(x + 1, y, obj_Damage)) && (!invulnerable)
{
global.Corazon -= 1;
audio_play_sound(snd_JugadorMuere, 90, false);
invulnerable = true;
alarm[0] = 50;//tiempo que dura la invulnerabilidad
}
Y este el que tengo en el Step del Enemigo cuando colisiona con el jugador:
//Colisión con el Jugador y Muerte
if (place_meeting(x, y, obj_Jugador))
{
if (obj_Jugador.y < y - 32)
{
with (obj_Jugador) vsp = -jumpspeed;
instance_destroy();
audio_play_sound(snd_EnemigoMuere, 90, false);
}
else
{
if(!obj_Jugador.invulnerable)
{
audio_play_sound(snd_JugadorMuere, 90, false);
global.Corazon -= 1;
obj_Jugador.invulnerable = true;
obj_Jugador.alarm[0] = 50; //tiempo que dura la invulnerabilidad
}
}
}
Un saludo y gracias por adelantado :D
Pon esto en step de tu jugador.
[gml]
if (invulnerable && ( ( alarm[0] mod 3 )==0 ) ) ){
image_alpha=0;
}else image_alpha=1;[/gml]
Puedes cambiar el 3 por un numero menor para hacerlo más constante o uno mayor para hacerlo menos.
Muchas Gracias brunoxzx!!! Funciona de maravilla. Si no te importa me podrías explicar para que sirve el "mod", lo demás lo entiendo mas o menos. Es que me gusta entender para que funciona cada cosa y así aprender. Gracias de nuevo XD.
Y si alguien se anima y me dice como hacer que el jugador rebote un poco al se dañado se lo agradecería. Un saludo.
Mod devuelve el residuo de una division, en ese caso el timer de la alarma dividido entre 3:
Sería más o menos así conforme la alarma se va haciendo más pequeña:
((50/3)=16; residuo 2),
((49/3)=16; residuo 1),
((48/3)=15; residuo 0) AQUï image_alpha se hace 0;
((47/3)=15; residuo 2),
((46/3)=15; residuo 1),
((45/3)=15; residuo 0) AQUï image_alpha se hace 0;
((44/3)=15; residuo 2),
((43/3)=15; residuo 1),
((42/3)=15; residuo 0) AQUï image_alpha se hace 0;.....
y bueno ya sabras como sigue. EL operando modulo suele usarse para hacer conteos ciclicos, por ejemplo si quieres que se cuente del cero al 9 y se repita, haces esto: "numero=(numero+1) mod 10".
Lo de que rebote ya depende de tí jeje.. o de alguien más por acá...
Muchas gracias de nuevo :D. Ya me ha quedado algo más claro. Un saludo.