Quisiera mover un objeto hasta ciertas coordenadas y que se detenga, pero que mientras más se acerque a las coordenadas, pierda velocidad. Este efecto se llama "Erase Out", desde ya gracias! ;D
Aquí tienes un ejemplo:
Creas una room de 640 x 480.
Creas un objeto, lo llamamos erase_out. En CREATE EVENT ponemos:
// coordenada final
xfin = 320;
yfin = 240;
// variables para reducir la velocidad
numerador_x = abs(x-xfin);
denominador_x = abs(x-xfin);
// valor que reducira la velocidad
reduccion = numerador_x / denominador_x;
// velocidad inicial
veloc = 5;
En Step event ponemos:
// ir hacia la coordenada final
move_towards_point( xfin, yfin, veloc);
// actualizar numerador
numerador_x = abs(x-xfin);
// actualizar reduccion
reduccion = numerador_x / denominador_x;
// actualizar velocidad
veloc = 5 * reduccion;
Luego en la room colocar varios objetos erase_out y prueba. ;)
En realidad el efecto se llama "ease out". Primero debes seleccionar una función que tenga una curva de crecimiento con las características indicadas: primero crece rápido y después lento. Puedes encontrar varias funciones en internet o intentar deducirlas.
Este es un script que usa una función cuadrática:
[gml]
///ease_out_quad( a,b, t );
// a: valor inicial
// b: valor final
// t: parametro entre 0 y 1
var a,b,t;
a = argument0;
b = argument1;
t = argument2;
return (a-b)*sqr(t-1) + b;
[/gml]
Adjunto un ejemplo con el script.