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;
}
}
Arreglado! Bueno, "arreglado" , la cosa es que si que era un problema de las mascaras y los sprites!