Comunidad Game Maker

Sección General => Propuestas y soporte => Mensaje iniciado por: Mun en Marzo 20, 2020, 10:25:26 PM

Título: Climb Wall - Caminar por las paredees
Publicado por: Mun en Marzo 20, 2020, 10:25:26 PM
Buenas, cómo andan? Espero que bien.
Lees cuento, soy nuevo en el desarrollo de videojuegos (vengo del backend en java) y quería saber, cuál es la lógica para hacer que el personaje pueda trepar una pared (megaman- ori -flynn,etc) y a nivel código como hacerlo, porque estuve buscando y no encontré o no entendí como.

Muchas gracias!
Título: Re:Climb Wall - Caminar por las paredees
Publicado por: Clamud en Marzo 22, 2020, 03:03:26 PM
Yo optaría por una máquina de estados (esta forma de programar se menciona muy seguido en el foro). Crea varios bloques de código, uno por cada acción o forma de controlar al personaje, y ejecuta solo uno de los bloques en cada step. Por ejemplo, puedes tener el bloque de código de plataformero normal, en el que actúa la gravedad y no se pega a los bloques. Otro bloque de código sería el de trepar por las paredes, en este código no actúa la gravedad y usa place_meeting para revisar que el personaje está junto a un bloque.
Título: Re: Climb Wall - Caminar por las paredees
Publicado por: Jeffrey Faper en Octubre 22, 2021, 07:09:33 AM
tienes razón hay muy  poca información sobre estos temas de trepar por todos lados con slopes y toda la cosa pero bueno
colisionar con un objeto y trepar es muy sencillo te dejo un ejemplo sobre como se hacen los wall jump de megaman

[gml]
      //WALL-JUMP-LEFT-SLIDE
     if(!place_meeting(x,y+1,parSolid)  &&  place_meeting(x-1,y,Wall))
{   
     //MEGAMON se deslizara solo si se mantiene la tecla izquierda presionada
     if(keyL){
        vsp = grvspeed/.28;  //si pones la velocidad vertical en 0 megaman no se deslizara..
                //puedes crear un control de velocidad vertical para hacer que escale con las teclas up y down
               //en juegos como ori lo que hacen es ejecutar el mismo codigo de colisiones y gravedad pero a la inversa osea cambian la gravedad
            //cuando ori esta trepando en realidad esta en el suelo numero 2 creo que de esa forma consiguen que haga ceil slopes  tan bonitos
        state = Action.WallSlideL;  //megaman esta en el estado wall sliding left 
       }
     
     //MEGAMON ejecutara un wall jump si el jugador presiona la tecla de salto y esta colisionando contra la pared
     if(place_meeting(x-1,y,Wall) && keyJump){
        vsp =-jmpspeed;           //su velocidad de salto
        hsp = maxspeed*2.2;  //incrementamos la velocidad horizontal para que se aleje de la pared
        jump = 1;        //contador de saltos util para double jump
        state = Action.WallKickingL; //entra al estado wall kick
      }
}   
[/gml]