Buenas familia, otra vez ando por aqui.

Resulta que tengo un player, que cada vez que pulsamos una tecla de direccion este se mueve hasta un punto maximo, para poder movernos sobre el tamaño
de unos bloques. El tamaño de estos bloques son de 64pixeles, por eso el punto maximo es hasta 64 pixeles.

Hasta aqui todo bien. Todo me funciona correcto. El problema esta, es que el movimiento es muy brusco, me gustaria darle una aceleracion suave, al menos cuando inicia el movimiento.

Ahora mismo uso una variable velocidad y estaba en 8, pero para aplicarle una aceleracion he iniciado velocidad en 1.

Pero resulta que se mueve practicamente igual de brusco que antes. He bajado la velocidad inicial a valores super bajos como 0,0005; pero nada, se mueve igual de brusco.

Algo se me esta escapando, y ahora mismo no doy con la tecla, os paso el codigo del STEP;


                while (punto_maximo > 0)
                {
                    direction = 0; sprite_index = sprite_DERECHA;  image_xscale = 1;
                    x += velocidad;
                    punto_maximo = punto_maximo - velocidad;
                    //if (velocidad < 8){velocidad += 1;}
                 }


Espero vuestra ayuda familia, saludos!!!
PCNONOGames  www.pcnono.es

Hola nonoroman

El problema es que el "while" repite ese mismo código infinitas veces en el mismo step hasta que la condición se deje de cumplir, por eso ves que se mueve de golpe.
Reemplaza el "while" por un "if" y se debería solucionar.

Saludos

Muchas gracias, la verdad es que con el if la aceleracion se nota, pero....

con esta condicion, puede pararse entre un bloque y otro, la idea es que no se quede nunca entre medias. Con el while, hasta no llegar al punto exacto no paraba. En este sentido es mas preciso.

Pero entonces, como le puedo dar esa pequeña aceleracion???   ???

Cita de: BssString en Marzo 01, 2020, 10:24:21 PM
Hola nonoroman

El problema es que el "while" repite ese mismo código infinitas veces en el mismo step hasta que la condición se deje de cumplir, por eso ves que se mueve de golpe.
Reemplaza el "while" por un "if" y se debería solucionar.

Saludos
PCNONOGames  www.pcnono.es

Hola nonoroman.

Hasta ahora yo me he servido de un código muy útil que ví hace un tiempo en unos tutoriales de TheMontyDrake. Es algo así:

[gml]
if (argument0 < argument1)
   return min(argument0 + argument2, argument1);
else
   return max(argument0 - argument2, argument1);
[/gml]

Le doy a la variable de velocidad el valor que devuelva el script y al final del step le sumo el valor a la x e y depende del caso.