Hola.
Estoy haciendo un plataformas 2D y quiero estoy programando las típicas plataformas que puedes atravesar desde abajo pero luego al caer aterrizas sobre ella como si de un suelo se tratase.
Para ello he usado el siguiente código:
Step en el protagonista:
//Vertical Collision
if place_meeting(x,y+vsp,par_wall)
{
while (!place_meeting(x,y+sign(vsp),par_wall)) y+=sign(vsp);
if (sign(vsp) == 1) grounded = 1;
vsp = 0;
}
else
{
grounded = 0;
}
//Commit to movement
y += vsp;
Para hacer las plataformas utilicé dos objetos diferentes "par_ghost_floor_nosol" que no es sólido y "par_ghost_floor_sol" que tiene como parent "par_wall" que uso como suelo y pared en el juego (es sólido).
Estos objetos se alternan en función de la posición del protagonista respecto a ellos.
par_ghot_floor_nosol:
Jump-Through Platform
if obj_hero_A.y<id.y-71 //if you are above the platform (AJUSTAR VALORES CUANDO SE CAMBIEN LOS SPRITES DEL PERSONAJE!!)
{
instance_change(par_ghost_floor_sol,true) //the platform is solid (because it has "par_wall" as parent.
}
par_ghost_floor_sol:
//Jump-Through Platform
if obj_hero_A.y>y //if you are below the platform
{
instance_change(par_ghost_floor_nosol,true) //the platform is not solid
}
De esta manera funciona bien. Pero mi problema es que al estar basado solo en la posición del personaje, no pueden haber enemígos ni objetos sobre este suelo, ya que si el personaje principal bajase, el suelo desaparecería y todo caería al suelo.
Del mismo modo esto sería injugable a dos players porque el suelo solo reaccionaría al player1.
¿Alguien sabe algún modo de hacer esto de otra manera más eficiente y acorde a las necesidades de este juego?
Quien me ayude saldrá en los créditos de mi juego!
Muchas gracias!
Tu idea esta buena pero se te complica cuando tener otros objetos.
Lo mejor seria que la plataforma nunca sea solida.
pero para ello tendrías que alterar bastante lo que hiciste
Sí, esta claro que hay que hacer algo completamente diferente..