¿Cómo se utiliza delta_time en GMS, y qué promete?, pregunto lo segundo porque tengo entendido que eso ayudaría a evitar el lag en los movimientos... :-[
Pues el manual pone propone un ajuste de velocidad de las instancias como función del tiempo transcurrido entre steps. Sin embargo, me parece poco recomendable porque tendría varias consecuencias desagradables. La más importante es que, al bajar la cantidad de steps por segundo, la detección de colisiones se haría menos veces y por lo tanto muchas de estas no serían detectadas, provocando que algunos ataques no impacten a los enemigos (aunque las trayectorias parezcan correctas) o que algunos obstáculos puedan ser atravesados. Lo anterior se podría evitar si la precisión no estuviera condicionada por la cantidad de veces que se detectan las colisiones, usando técnicas como "raycasting". Además el cambio de velocidad no sería coherente con movimientos que tienen aceleración, como los saltos en un juego de plataformas, lo correcto sería ajustar la gravedad de forma dinámica, pero eso requiere unos cálculos más complicados.
Lo mejor sería crear un sistema de salto de fotogramas, ya que por lo general el evento Draw es el que consume la mayor cantidad de tiempo. Esto se haría desactivando el dibujado automático (existe una función para eso, pero no recuerdo cuál es, también se podría hacer con la variable visible), y revisando en cada Step el valor de delta_time, el fotograma actual se dibujaría sólo si el valor de delta_time se encuentra dentro de los límites.
Aquí hay un tutorial http://gmc.yoyogames.com/index.php?showtopic=556480 según el cual:
Algo así:
[gml]
delta = 60/1000000*delta_time
[/gml]
60 es la velocidad base a la que quieres que el juego se mantenga. La variable delta es algo así como un "factor de compensación" por el cual multiplicarías tus variables de movimiento, por ejemplo la velocidad, para que el objeto se moviera más rápido si el juego baja de fps o más lento si el juego sube de fps. De acuerdo a ese tutorial, antes hay que ajustar a velocidad de la habitación a un valor muy alto (en ese ejemplo 9999).
Otra manera sería usándolo como se muestra en el manual:
http://docs.yoyogames.com/source/dadiospice/002_reference/date%20and%20time/delta_time.html
Yo he leído varias discusiones y algunos opinan a favor de usar delta_time mientras que otros opinan en contra y prefieren usar frame skipping. Hay cosas para las que no es conveniente usar delta_time, por ejemplo, alarmas. Yo en lo personal prefiero tratar de optimizar el código.
En general sólo quería mejorar el movimiento de unos objetos que van apareciendo de derecha a izquierda, ya que hay cierto lag en ellos de vez en cuando... no sé si me sirva para eso ???
¿En qué plataforma? Se me hace raro que un movimiento simple produzca lag, a menos que se aun juego muy pesado. ¿Hay baja de fps cuando esos objetos aparecen en la habitación? Nada se quita con probar, pero si los fps no bajan a algo menor a la velocidad de la habitación, yo no usaría delta_time.