Hola a todos, estoy haciendo un juego y necesito un movimiento parabólico, quiero que una granada   vaya a  un punto alto, con la distancia, y  recorra entre el punto del soldado y caiga  donde fue puesto el mouse para lanzar.  Pero no se hacerlo y por eso les estoy pidiendo ayuda  :'(

Como en el ejemplo del video de abajo :
https://photos.app.goo.gl/3rqAwf17PHWJ97Me9]

Es relativamente simple, lo primero es, en el evento Create, determinar el punto de origen desde donde sale la granada y el punto final donde caerá la granada, y usar esos puntos para determinar la distancia y dirección en que la granada va a viajar, e inicializamos una variable z para la altura del vuelo de la granada:

[gml]Dest_x = mouse_x;
Dest_y = mouse_y;

Dist = point_distance(xstart,ystart,Dest_x,Dest_y);
Dir = point_direction(xstart,ystart,Dest_x,Dest_y);

z = 0;[/gml]

Luego en cada paso movemos la instancia la cantidad apropiada y calculamos la altura que tendría la granada en ese paso:

[gml]Dist_Rem = point_distance(x,y,Dest_x,Dest_y)

x += lengthdir_x(min(Dist_Rem,8),Dir)
y += lengthdir_y(min(Dist_Rem,8),Dir)

z = sin((((Dist_Rem)/Dist))*pi)[/gml]

El calculo de z es simple, tomamos la distancia que le falta a la granada por viajar y la dividimos entre la distancia total que debe viajar para normalizar el valor, tomamos dicho valor y lo multiplicamos por pi para poder aprovechar la parábola de la función matemática seno.

Ahora simplemente se dibuja manualmente el sprite del objeto, multiplicando z por el valor de la altura máxima que la granada puede alcanzar y restándole el resultado a al valor y. Recomendaría en lugar de usar un valor estático para la altura máxima usar un factor de la distancia total:

[gml]draw_sprite_ext(sprite_index,image_index,x,y-z*(Dist/3)[/gml]

Dejo un ejemplo con el código: