Hola a todos.
Quisiera programar que el personaje principal de un salto hacia atrás cuando hace contacto con un enemigo o con cualquier otro elemento dañino del juego. Se trata de un plataformas 2D estilo Ghouls & Ghosts.

De momento tengo lo siguiente:

en STEP:
//Damage
if hurt=1{
  image_alpha=0.5;
}else{
  image_alpha=1;
  alarm[2]=30; // make the character invincible for a while


Cuando se hace contacto con un enemigo se activa la variable hurt del personaje y durante 30 frames es invencible. A esto quisiera añadirle el efecto de salto hacia atrás y no sé como hacer que el salto sea hacia izquierda o derecha dependiendo de la posición del personaje respecto al enemigo.

Algo que podrías hacer es centrar el sprite del objeto dañino, o dejarlo al medio.

Entonces luego podes aplicarle una verificación  de X al personaje respecto al objeto dañino:

[gml]
if (x < obj_danino.x) //esto implicaría que nuestro personaje está del lado izquierdo del objeto dañino
   hspeed = -4; //entonces lo tira para atras

if (x > obj_danino.x) // y esto, que esta en el lado derecho
   hspeed = 4; // lo tira para atras
[/gml]

Y si querés que haga un salto podés combinarlo con vspeed y gravity.




Y si hubiera más de un enemigo en pantalla? funcionaría de esa manera o se confundiría, imaginate que hay un enemigo delante y otro detras del personaje.
Gracias por contestarme.

#3 Octubre 25, 2013, 09:50:20 PM Ultima modificación: Octubre 26, 2013, 03:20:27 AM por Black_Cat
Ahh buena pregunta, en todo caso deberías cambiarlo un poquito ya dependiendo donde se esté evaluando.
Por ejemplo este código correspondería para el objeto player en colision con el objeto enemigo:

[gml]
if (x < other.x)
   hspeed = -4;
[/gml]

Lo que sucede ahí es que la palabra other ahora está remplazando el nombre del enemigo con el que esta colisionando actualmente el jugador.
Así no tendría problemas con varias instancias de objetos enemigo.

entiendes?



Lo he entendido muy bien gracias. Lo he probado y funciona.
Ahora mi única pega es hacer que durante unos pocos frames las teclas de movimiento queden desactivadas. Esto es porque si no dejo de correr la reacción del personaje es casi inapreciable.

Gracias de nuevo!

Podrías verificar en el evento de las teclas, que solo pueda mover si "hurt" es falso.

Por ej.:
if (!hurt)
x+= 4;