Noticias

Se ha publicado un nuevo servicio, el Portal de Juegos Online

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Autor Tema: Ayuda con colisiones + salto en GameMaker  (Leído 233 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Eskizo

  • Visitante
  • *
  • Puntos: 5
  • Mensajes: 2
    • Ver Perfil
en: Julio 11, 2020, 09:14:41 pm
Hola! Bueno, acabo de empezar a trastear con el Game Maker (1.4) y me he encontrado un par de problemas que por mas que busco y rebusco en el codigo no doy con la solucion, a ver si alguien puede echarme un cable. Si mis preguntas ya tienen respuesta en otro hilo, porfavor, ruego me disculpen y me indiquen como llegar a ese hilo! Gracias por la paciencia de antemano!
Aqui los problemas:
Estoy probando un tutorial para plataformas con GameMaker y hay una opcion de salto que nos enseñan a programar que es la de salto contra la pared. En teoria, deberia servir para que, cuando mi personaje salta hacia una pared, si estoy contra la pared, pueda volver a saltar impulsandose desde la pared. Pero lo que ocurre es que, si me quedo parado frente a la pared colisionando desde el suelo, puedo utilizar esta opcion y saltar contra la pared todo lo que quiera (lo cual no deberia pasar porque el codigo deberia ejectarse cuando salto hacia la pared). Sin embargo, si salto contra una pared, y vuelvo a pulsar saltar enfrentandome con la tecla izq o dcha contra la pared (es decir, saltando hacia la propia pared) el objeto player se queda pegado con el sprite de "en pie" atrapado entre el objeto bloque y el aire, y no se puede mover.
Y el otro problema que tengo es con las rampas. Mi personaje no puede recorrerlas hacia arriba si me paro a mitad de rampa llendo hacia abajo e intento subir repentinamente.
Ambos problemas estoy convencido de que vienen de mano del apartado grafico, y no tanto de la linea de codigo (aunque tambien pudiera ser) porque el codigo lo he revisado trochocientas veces y no veo nada incorrecto. El caso es que con los sprites tampoco entiendo el problema porque, pensando que podia ser el como habia diseñado los spr del personaje, los cambie directamente por rectangulos en todas las animaciones, para poder poner el punto de origen y las mascaras de forma facil e intuitiva, y aun asi haga lo que haga me sigue pasando lo mismo
Como creo que no estoy siendo nada especifico, dejo un video donde muestro cuales son los problemas que he mencionado. Tambien les dejo las lineas de codigo de ambas situaciones a ver si pudierais ver algo que se me esta escapando.
Mil gracias de antemano

//Salto de Pared

if (intColLeft && keyJump  && !bolGround )
{

    if (intMove < 0)
    {
        intVX = intVXMax * 0.5;
        intVY = -intJumpHeight * 1.25;
    }
    else
    {
         intVX = intVXMax;
         intVY = -intJumpHeight * 0.75;
    }
}

if (intColRight && keyJump && !bolGround)
{

    if (intMove > 0)
    {
        intVX = -intVXMax * 0.5;
        intVY = -intJumpHeight * 1.25;
    }
    else
    {
         intVX = -intVXMax;
         intVY = -intJumpHeight * 0.75;
    }
}


//Colision horizontal
repeat(abs(intVX))
{
     //Cuesta arriba
     if (place_meeting(x + sign(intVX), y, objBlock) && place_meeting(x + sign(intVX), y - 1, objBlock) && !place_meeting(x + sign(intVX), y - 2, objBlock)) y-=2;
     else if (place_meeting(x + sign(intVX), y, objBlock) && !place_meeting(x + sign(intVX), y - 1, objBlock)) y--;
   
     
     //Cuesta abajo
    if (!place_meeting(x + sign(intVX), y, objBlock) && !place_meeting(x + sign(intVX), y + 1, objBlock) && !place_meeting(x + sign(intVX), y + 2, objBlock) && place_meeting(x + sign(intVX), y + 3, objBlock)) y+=2;
    else if (!place_meeting(x + sign(intVX), y, objBlock) && !place_meeting(x + sign(intVX), y + 1, objBlock) && place_meeting(x + sign(intVX), y + 2, objBlock)) y++;
     
     
     if (!place_meeting( x + sign(intVX), y, objBlock))
     {
           x += intMove
     }
     else
     {
           intVX = 0;
           break;
     }
}

« última modificación: Julio 11, 2020, 09:17:00 pm por Eskizo »

 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado Eskizo

  • Visitante
  • *
  • Puntos: 5
  • Mensajes: 2
    • Ver Perfil
Respuesta #1 en: Julio 11, 2020, 10:54:03 pm
Arreglado! Bueno, "arreglado" , la cosa es que si que era un problema de las mascaras y los sprites!