Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: MetalGore en Junio 10, 2017, 02:51:51 PM

Título: (Solucionado) Rebote del Jugador contra el enemigo
Publicado por: MetalGore en Junio 10, 2017, 02:51:51 PM
Hola de nuevo, vuelvo a estar atascado en mi intento de hacer un juego de plataformas :-[. Mi problema ahora en que no consigo que cuando un enemigo colisiona horizontalmente contra el jugador, el jugador rebote un poco.
Al jugador le tengo puestos tres corazones, para que muera cuando pierde los tres y el problema es que cuando colisiona contra el enemigo pierde los tres muy deprisa, quiero hacer que el jugador rebote cuando colisiona con el enemigo horizontalmente (en vertical tengo puesto que el enemigo muera). Este es el codigo del enemigo cuando colisiona contra el jugador:
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
    {   
        audio_play_sound(snd_JugadorMuere, 90, false);
        global.Corazon -= 1;         
    }
}


Creo que hay que poner algo en el "else" pero he probado varias y ninguna me ha funcionado. Espero que alguien me pueda ayudar.
Gracias y un Saludo a todos.
Título: Re:Rebote del Jugador contra el enemigo
Publicado por: Clamud en Junio 10, 2017, 04:38:38 PM
Debes agregar una variable que indique que el jugador es invulnerable un corto periodo de tiempo. Si es invulnerable no ejecuta el código de colisión con los enemigos.
Título: Re:Rebote del Jugador contra el enemigo
Publicado por: MetalGore en Junio 10, 2017, 07:51:12 PM
¿Como se hace eso Clamud? :-[. Soy un poco novato en codigo gml, llevo poco tiempo en esto de la programación de videojuegos.
Gracias por contestar. :)
Título: Re:Rebote del Jugador contra el enemigo
Publicado por: Ashe de Freljord en Junio 11, 2017, 02:38:06 AM
tienes que ponerle una variable al personaje, por ejemplo:

invulnerable = false

luego, cuando le hagan daño es necesario que se haga invulnerable, y para que pueda recibir daño nuevamente, basta con resetearla, a lo mejor con una alarma dentro del personaje.

[GML]
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] = 60;
        }
    }
}
[/GML]

luego en evento alarm0

invulnerable = false



incluso puedes ponerle algun efecto de titilamiento para indicar que esta herido
Título: Re:(Solucionado) Rebote del Jugador contra el enemigo
Publicado por: MetalGore en Junio 11, 2017, 08:17:19 PM
Muchas Gracias Ashe y Clamud por vuestra ayuda. A funcionado!!! ;D y cada día a aprender un poco más.
Gracias de nuevo y un saludo.