Hola chicos tengo un problemilla con un engine rope que estoy probando. En el centro de la pantalla hay un personaje con gravity=1 en su evento create que va callendo hacia el suelo.
Yo he creado un obj_suelo para que aterrice sobre el. En el evento step del personaje digo if place_meeting(x,y+1,obj_suelo){gravity=0}. Pero no funciona el personaje cuando colisiona con el suelo no se detiene sobre el, sigue bajando y descendiendo.


Ademas de gravity = 0 ponele vspeed = 0
Creo que te falto eso.

Saludos.


Genial funciona :) ahora tengo otro problema  :'(. Cuando el personaje aterriza casi siempre se hunde en el suelo. Tengo mascara de colision precisa tanto en personaje como en el suelo. Muestro un video del proyecto.

https://www.youtube.com/watch?v=SD2YizV55Os&feature=youtu.be

Bien, pero ahí tenés un error por usar las funciones del programa y no unas hechas por vos.
Si vos pones que cuando place_meeting (x,y+1,obj_suelo){vspeed =0; gravity = 0} .... Te va a pasar lo que te pasa, y más todavía si el objeto va más rápido.
Tenes que hacer algo así :
If !place_meeting(x,y+vspeed, obj_suelo){
gravity = 0.5
} else { vspeed = 0; gravity = 0 }
//// creo que algo así andaría un poco mejor...

Va mejor ya se planta bien sobre el suelo pero antes de tocar el suelo se frena y hace un efecto raro. El codigo no tiene nada en la velocidad de caida lo unico que tiene es un evento create con gravity=1. Este es su codigo del evento step lo que mueve el personaje con la cuerda

[spoiler]
//grabs objects that are sol
if mouse_check_button_pressed(mb_left) or  mouse_check_button_pressed(mb_left) and place_meeting(x,y+1,obj_wall)
{
    dir=point_direction(x,y,mouse_x,mouse_y);
   
    x_change=lengthdir_x(8,dir);
    y_change=lengthdir_y(8,dir);

    xx=x;
    yy=y;

    for(i=0;i<1000;i+=1)
    {
        nn=instance_position(xx,yy,all);
   
        if !(nn=noone)
        && !(nn=id)
        {
            if nn.sol
            {
                grab=1;
                break;
            }
        }
       
        xx+=x_change;
        yy+=y_change;
    }
}

//moves
if grab
{
    grab=mouse_check_button(mb_left);
   
    dir=point_direction(x,y,xx,yy);
    motion_add(dir,1.75);
}[/spoiler]

Yo uso este codigo y siempre me ha funcionado:

COLISION CON SUELO
y=yprevious
move_contact_all(270,abs(vspeed))
vspeed=0


ademas del codigo para detener la gravedad en STEP.

ahora no hace nada. Se queda trabado xD

usa SIEMPRE números múltipos de 2, así jamás tendrás errores así.
[spoiler="ola k ase clickarme o k ase"]la imagen no se quita xD
[/spoiler]