Haber si me explico.
Tengo una pelota que tiene por defecto una hspeed=10. Se mueve por la plataforma y salta (hatsa hay todo bien). El problema viene cunaod la pelota cae de la plataforma y choca con unlateral de otra y se queda la pelota congelada...
Como en la foto:


El codigo de gravedad lo tenog e el step de la bola y es:
//Ponemos gravedad y limite de velocidad en gravedad
if place_free(0,+1)
    {
    gravity=0.5
    gravity_direction=270
    }
else
    {
    gravity=0
    gravity_direction=270
    }
if vspeed > 10
    {vspeed=10}


y en el eento collision con el suelo es este:
move_contact_solid(direction,12);
vspeed=0;


Estoy convencido que el problema esta en el codigo de collision peor no se como solucionarlo...


Haz un sprite del mismo tamaño que tu bola pero cuadrado, luego se la asignas como mascara de colision, abajo de parent en el objeto de la bola dice "Mask:" y ahi seleccionas el sprite que creaste cuadrado. Eso deveria funcionar.

No funciona. De todas formas en propiedades del sprite ya le modifique la mascara de forma manual y la hice rectangular, vamos que su mascara no es redonda..

No puedes hacer una referencia absoluta para la función place_free. asi como lo tienes siempre verifica la colisión en el pixel [0,1] de la ventana donde supongo no hay nada.
debes decir:
[gml]
if place_free(x,y+16) {
    //esta posición es relativa al objeto que usa la funcion
[/gml]
el valor adicional en y depende del tamaño del sprite y la posición del offset en el mismo.
verifica que el offset del sprite sea el centro y que el tamaño sea de 32x32 pixeles, para que puedas poner +16.

PD: tambien haz lo de la mask
Cita de: Fenris78Si un tema os resulta de interes y veis que hay poca información, la mejor solucion no es quejarse o pedir sin pensar, sino sugerir algo bien planteado o aportarlo vosotros mismos.
Cita de: CalioSomos desarrolladores independientes y, por lo tanto, no tenemos por qué guiarnos por las tendencias del mercado.

//Ponemos gravedad y limite de velocidad en gravedad
if place_free(x,y+16)
    {
    gravity=0.5
    gravity_direction=270
    }
else
    {
    gravity=0
    gravity_direction=270
    }
if vspeed > 10
    {vspeed=10}

el codigo como tu me dices quedaria asi no?. Pues no funciona tampoco... ni con mask ni sin ella...

yo en el evento de colision utilizo esto:

hspeed=0;

//AL colisionar abajo con el piso
if(vspeed>0){
    move_contact_solid(270,vspeed);
    vspeed=0;
}

//al colisionar arriba con el techo
if (vspeed<0 and !place_free(x,y-12)){
     move_contact_solid(90,vspeed);
     vspeed=0;
}
//ese !place_free(x,y-12) lo puse por que sin el provoca un bug, en donde sale 12 es la velocidad del salto
//o sea, tu vspeed, hay le colocas la vspeed que usa tu bola para saltar


Si no te funciona seria bueno que dejaras el editable, asi te podriamos ayudar mejor.


LISTO  8). Pruebalo y me dices.

Gracias me funciono a medias.
Quite lo del else hspeed=10.
y el codigo lo modifique asi:
//SI HAY UNA PARED 10 PIXELES A LA DERECHA, ME DETENGO
if place_meeting(x+10,y+0,suelo_obj)or place_meeting(x-10,y+0,suelo_obj){
    hspeed=0;
}

Para que solo pase con la pared.
Muchas gracias me sirvio