Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: Black_Cat en Marzo 27, 2016, 03:19:29 AM

Título: Problema colision lateral plataformas
Publicado por: Black_Cat en Marzo 27, 2016, 03:19:29 AM
hola, estoy haciendo un juegito de plataformas, pero tengo un problema que no sé porque es que ocurre. Mi personaje se queda tildada en la pared. (Les dejo una imagen para que vean, que se tilda xD )

bueno, no tengo idea de porqué esto ocurre, si creo que verifico con creces de que no se mueva a menos que tenga un espacio libre.
El código que uso para que se mueva es el siguiente:

[GML]
if (keyboard_check(vk_left)){
   
    repeat(velL){
        if (!collision_rectangle(x-(mitadH+3), y-mitadV, x+mitadH, y+mitadV, plataforma_3232, false, true))
            x -= 1;
    }
   
    estado = "corriendo";
    der = false;
}

[/GML]
Donde mitadH es la mitad del sprite mascara. Esto quiere decir que calculo que no haya colision desde el centro del personaje menos(porque verifica la izquierda) la mitad del ancho de la mascara añadiendole 3 pixeles por si acaso.
Luego hago el rectangulo para que no se trabe por otros lados.

Me gustaría que me ayuden con este problema  :'(
Título: Re:Problema colision lateral plataformas
Publicado por: Clamud en Marzo 27, 2016, 04:00:09 AM
La verdad es muy raro, tal vez el repeat se hace con un número negativo. Mejor usa un código comprobado, para no esforzarnos mucho en encontrar la solución:
[gml]
if keyboard_check( vk_left )
{
    x += velL;
    while place_meeting( x,y, plataforma_3232 ) x += 1;
   
    estado = "corriendo";
    der = false;
}
[/gml]
Aquí la colisión se detecta con la caja de colisión normal, pero si necesitas cambiarla en determinadas situaciones puedes usar la variable mask_index.
Título: Re:Problema colision lateral plataformas
Publicado por: Black_Cat en Marzo 27, 2016, 05:09:41 AM
Ah vale, el código que me facilitaste va al pelo

la verdad es una solucion muy curiosa, de hecho nunca se me hubiera ocurrido de esa manera, puesto que siempre evité llegar a tener una colision con la plataforma en si. En este caso digamos que se fuerza la colision y luego se enmienda. muy curioso la verdad

aunque tuve que tocar un poco el código de las colisiones, nada grave
te agradezco la pronta ayuda :D