Thăng Long Đạo | Chapter 584 : At home anywhere | Womens Wide Foot Harriet OpenToe Sandals New Look tpRz9ew

Problema con codigo de slopes y salto cuando choco con el techo

OP

ZELDAFANGM

Advanced Newbie
Mensajes
15
Calificaciones
4
Puntos
9
#1
Buenas dias, estoy haciendo un engine de plataformas para despues hacerlo juego y tengo estos 2 problemas el primero son los slopes, que pueden bajar sin problemas pero ya no pueden subir y el segundo es cuando salto repetidas veces y toco el techo no baja hasta que dejo de apretar el salto, el codigo que tengo es este:
Código:
//Slopes
if (Left or Right)
{
    for(i = 0; i < 5; i += 1)
    {
        if (place_free(x, y - i))
        {
            y -= i;
            break;
        }
    }
}
Y el codigo del salto es este:
Código:
//Salto
if (!place_free(x, y + 1))
{
    canMove = 1
    if (saltos = 0)
    {
        if (Jump)
        {
            vspd = -velSalto;
            if (dir = 0)
            {
                wallJump = 1
            }
            else if (dir = 1)
            {
                wallJump = -1
            }
        }
    }
}
//Segundo salto
else
{
    if (saltos = 0) { saltos = 1; }
    if (saltos = 1)
    {
        if (Jump)
        {
            vspd = -velSalto;
            if (dir = 0)
            {
                wallJump = 1
            }
            else if (dir = 1)
            {
                wallJump = -1
            }
            saltos = 2;
        }
    }
}
pueden revisar Este(Arreglado) engine para comprender el movimiento.
 
Última edición:

Khyze

Muchos merecen morir!
Colaborador
Mensajes
4.417
Calificaciones
2K 22
Puntos
325
Ubicación
Patria, patria, patria querida!
#2
Buenas dias, estoy haciendo un engine de plataformas para despues hacerlo juego y tengo estos 2 problemas el primero son los slopes, que pueden bajar sin problemas pero ya no pueden subir
Código:
//Slopes
if (Left or Right)
{
    for(i = 0; i < 5; i += 1)
    {
        if (place_free(x, y - i))
        {
            y -= i;
            break;
        }
    }
}
De ser asi, debiste haber traido el codigo completo, por ejemplo lo que entiendo de eso es que si esta vacio arriba, este subira? (Quizas por eso al saltar se queda en el techo y no baja)

Sobre lo que no puedas subir un slope podria ser algun codigo asi
Código:
if (!place_free(x+1, y))
x+=1;
Alli ya igual colisionaria con el slope y no podria subir, se pondria algo como "place_free(x+1, y-5)" para evitar eso, pero el problema seria la altura de el slope, normalmente es de un pixel, pero con 5 ya creo que seria suficiente.

pueden revisar este engine para comprender el movimiento.
Pide contraseña, el url debe ser mas largo
 

Khyze

Muchos merecen morir!
Colaborador
Mensajes
4.417
Calificaciones
2K 22
Puntos
325
Ubicación
Patria, patria, patria querida!
#4
Jajaja perdon ya est arreglado, si puedes revisar el codig para que veas como esta todo, todo el codigo o casi todo esta en step
Código:
//Colisiones perfectas
if (!place_free(x + hspd, y))
{
    repeat(abs(spd))
    {
        if (place_free(x + sign(hspd), y))
        {
            x += sign(hspd);
        }
        else
        {
            break;
        }
    }
    hspd = 0;
}
x += hspd;
Tal como dije, esta linea (Step 122):
if (place_free(x + sign(hspd), y))

Se cambia a:
if (place_free(x + sign(hspd), y-1))

Y se arregla, aunque sube algo lento (De hecho se ve bien, subir es mas lento que bajar :p), pero si lo haces como dije antes la velocidad va igual:
if (place_free(x + sign(hspd), y-5))

Sobre el salto... No vi ningun error >.<
 
OP

ZELDAFANGM

Advanced Newbie
Mensajes
15
Calificaciones
4
Puntos
9
#5
Código:
//Colisiones perfectas
if (!place_free(x + hspd, y))
{
    repeat(abs(spd))
    {
        if (place_free(x + sign(hspd), y))
        {
            x += sign(hspd);
        }
        else
        {
            break;
        }
    }
    hspd = 0;
}
x += hspd;
Tal como dije, esta linea (Step 122):
if (place_free(x + sign(hspd), y))

Se cambia a:
if (place_free(x + sign(hspd), y-1))

Y se arregla, aunque sube algo lento (De hecho se ve bien, subir es mas lento que bajar :p), pero si lo haces como dije antes la velocidad va igual:
if (place_free(x + sign(hspd), y-5))

Sobre el salto... No vi ningun error >.<
Muchas gracias ya quedo el slope te dejo esta Imagen gif del error
 

Khyze

Muchos merecen morir!
Colaborador
Mensajes
4.417
Calificaciones
2K 22
Puntos
325
Ubicación
Patria, patria, patria querida!
#6
Muchas gracias ya quedo el slope te dejo esta Imagen gif del error
De nada y Ahhh, es que lo explicaste mal xD, debiste haber escrito "Si toco el techo puedo saltar infinitamente" o algo asi, pues aqui la respuesta:

Código:
//Detecta las colisiones verticales
if (!place_free(x, y + vspd))
{
    repeat(abs(spd))
    {
        if (place_free(x, y + sign(vspd)))
        {
            y += sign(vspd);
        }
        else
        {
            break;
        }
    }    
    if vspd>=0
    saltos = 0;
    
    vspd = 0;
}
y += vspd;
Como ves, la diferencia es esta "if vspd>=0 saltos = 0;" lo que significa que solo restaurara la posibilidad de saltar si la vspd es mayor a 0 (0 seria en el suelo o +1 al caer, pero nunca -1 que seria hacia arriba > Tocando el techo)

Para que funcione tambien movi lo de "vspd = 0;" para abajo, ya que si lo cambia antes del checkeo seria exactamente igual para cualquier caso xD