Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: demonmar en Marzo 23, 2015, 01:47:32 AM

Título: Ayuda con colision
Publicado por: demonmar en Marzo 23, 2015, 01:47:32 AM
hola tengo un juego tipo castlevania, le tengo un efecto de gravedad como cualquier juego de plataformas, cuando colisiona con un objeto solido el personaje deja de tener gravedad y puede caminar sobre ella hasta hay todo normal pero cuando colisiona horizontalmente con una pared el muñeco se traba y hasta que deje colisionarla el personaje vuelve a tener su gravedad entonces como soluciono esto gracias
Título: Re:Ayuda con colision
Publicado por: 3dgeminis en Marzo 23, 2015, 04:07:26 AM
Estoy seguro que el problema esta en como lo moves hacia los costados. Te doy un ejemplo que habia hecho para otra pregunta
Título: Re:Ayuda con colision
Publicado por: vitail en Marzo 24, 2015, 08:59:21 PM
Este es el que uso yo siempre.

Evento create

vsp = 0 //velocidad vertical
hsp = 0 // velocidad horizontal
movespeed = 6 //velocidad en la que se movera (no necesaria)
jumpspeed = 12 // velocidad en la que saltara (no necesaria)
grav = 0.5 // velocidad en la que caera (no necesaria)


Evento step
//Variables
var lkey = keyboard_check(vk_left);
var rkey = keyboard_check(vk_right);
var jkey = keyboard_check_pressed(vk_up);
//Si el jugador toca 1 pixel hacia abajo
if(place_meeting(x,y+1,obj_wall))
{
    vsp = 0;//Velocidad vertical es igual a cero
    if(jkey)
    {
        vsp = -jumpspd; // y si toca jkey seria -jumpspeed.
    }
}
else
{
    if(vsp < 10) // Cuando ya vsp sea menor a diez
    {
        vsp += grav; //Empezara a bajar
    }
}

if(rkey)
{
    hsp = movespd;
}
if(lkey)      //Movimientos izquierda y derecha
{
    hsp = -movespd;
}

if((!rkey && !lkey) || (rkey && lkey)) //Si no toco ninguna tecla o las dos
{//Velocidad hor es igual a cero.
    hsp = 0;
}

//Colisiones horizontales.
if(place_meeting(x+hsp,y,obj_wall))//Si tocamos la pared a la velocidad hor
{
    while(!place_meeting(x+sign(hsp),y,obj_wall))//Mientras que no toquemos
    {//La pared a la velocidad hor ya sea en -1 o 1
        x += sign(hsp);//Se movera un pixel en pixel
    }
    hsp = 0; //Hasta completar el while y que la velocidad horizontal sea cero
}
x += hsp;//Esto hace de que x siempre vaya aumentando a la velocidad de la variable
//Colisiones verticales.
if(place_meeting(x,y+vsp,obj_wall))//Lo mismo que colisiones horizontales.
{
    while(!place_meeting(x,y+sign(vsp),obj_wall))
    {
        y += sign(vsp);
    }
    vsp = 0;
}
y += vsp;