Delta time.

Discusión en general sobre Gemix.

Delta time.

Postby shao » Sat Nov 07, 2015 10:54 pm

Hola, por curiosidad y quizá para futuros programas, ¿como se obtiene en gemix el tiempo que pasa entre cada frame?, lo que también se le llama delta time.
¿Existe alguna variable que lo indique?.

Para los que no lo sepan, obteniendo este valor se pueden programar juegos independientemente de los fps al que corran, es decir, los movimientos de un juego a 60 fps irán a la misma velocidad que uno a 30, por lo tanto tu juego irá a la misma velocidad en una máquina que pueda correrlo a 60 y en otra que no de más de 30 fps.
User avatar
shao
 
Posts: 6034
Joined: Wed Jun 17, 2009 4:51 pm

Re: Delta time.

Postby TYCO » Sun Nov 08, 2015 5:13 pm

Las tween concretamente se basan en segundos y no en los fps del juego. Pero exceptuando esto...

Si quieres saber cuantos segundos pasan entre Frame GLOBAL y el siguiente Frame GLOBAL... la respuesta es... ni idea! ni zorra idea! a ver si CicTec puede decirnos algo.
Todo Modo Gráfico tiene por detrás una Línea de Comandos.

Proyecto: SnowCraft Remake (100%).
Proyecto: Bomb a Bomb Remake (100%).
Proyecto: Rally Mortal (87%).

[RETO]: 20lineas - [JUEGO]: eLaberinto[CONCURSO]: EL JUEGO DEL VERANO 2011 - [JUEGO]: PlayaBall
User avatar
TYCO
 
Posts: 3582
Joined: Tue Sep 02, 2008 7:38 pm

Re: Delta time.

Postby shao » Mon Nov 09, 2015 11:47 am

Tyco ¿que diablos es frame GLOCAL?, no lo he visto en ningún manual ni libro de DIV.

Consiste en el tiempo transcurrido entre el frame actual y el anterior, tu dices el frame actual y el siguiente, eso no se puede saber hasta que "el siguiente" se convierte en "el actual" supongo.
User avatar
shao
 
Posts: 6034
Joined: Wed Jun 17, 2009 4:51 pm

Re: Delta time.

Postby TYCO » Mon Nov 09, 2015 12:58 pm

Quise decir Frame GLOBAL, fallo mio. Y a lo que me refiero con FRAME GLOBAL... es al FRAME que ves tu en pantalla finalmente, ya sabes que cada process/function tiene su Frame.. pero solo cuando se ejecutan todos los Frames de cada process/function es cuando se vuelca todo al buffer de la pantalla (o a un graph que indicadmos con los "destinations"), a ese volcado le he llamado Frame GLOBAL.

Aclarado eso, para calcular el tiempo que pasa del último Frame Global hasta el actual, por mi parte desconozco si hay alguna función.

De todas formas para que te podría hacer falta saber ese tiempo?
Todo Modo Gráfico tiene por detrás una Línea de Comandos.

Proyecto: SnowCraft Remake (100%).
Proyecto: Bomb a Bomb Remake (100%).
Proyecto: Rally Mortal (87%).

[RETO]: 20lineas - [JUEGO]: eLaberinto[CONCURSO]: EL JUEGO DEL VERANO 2011 - [JUEGO]: PlayaBall
User avatar
TYCO
 
Posts: 3582
Joined: Tue Sep 02, 2008 7:38 pm

Re: Delta time.

Postby shao » Mon Nov 09, 2015 3:10 pm

Entonces sería indicando el tiempo pasado entre ese frame global y el anterior, supongo.

Es decir:
frame actual -> delta time -> frame anterior

Hacerme falta no me hace, pero podría ser de utilidad para programar juegos independientemente de fps.

Explico un poco según entiendo:

Si tu tienes un programa a 60 fps y tienes:

if(key(_right))
++x;

end

El sprite se mueve 60 pixeles en un segundo.

Si ese mismo programa lo corres en un PC que no da más de 30 fps, entonces el sprite se moverá 30 fps, entonces ese programa es dependiente de los fps del dispositivo donde se ejecuta.

Sabiendo este delta time, en vez de usar

if(key(_right))
++x;

end

Se podría usar:

if(key(_right))
x += 60 * deltaTime;

end

A 60 fps, deltaTime tendrá un valor medio de 0.01666... (1 segundo / 60 frames), es decir, se ejecutara un frame cada 0.016 centésimas de segundo.
Tu sprite se moverá 60 * 0.016 = 0.96 pixeles aprox.


A 30 fpgs, deltaTime = 1 seg / 30 fps = 0.03
Tu sprite se moverá 60 * 0.03 = 1.8 pixeles aprox.

Es decir que se movería la misma distancia aun con menos fps, por eso se obtiene que el juego se movería igual de rápido a 60 que a 30 aunque obviamente a 30 el movimiento sería algo mas tosco.

Es decir, delta time esta obteniendo continuamente el tiempo transcurrido entre el frame actual y el anterior, si el tiempo es mayor (por ejemplo a 30 fps) pues el sprite se moverá más distancia que si es a 60, ya que a 60, el espacio entre frames es menor que a 30.

Como la velocidad del pc puede variar, oscila entre una tasa de frames, pues así se conservaría los valores de movimiento aunque el pc vaya mas rápido o mas lento.
User avatar
shao
 
Posts: 6034
Joined: Wed Jun 17, 2009 4:51 pm

Re: Delta time.

Postby erkosone » Tue Nov 10, 2015 6:38 am

esto es justamente lo que hace la funcion set_fps() jeje.. sea cual sea el pc establece un tiempo entre frame y frame.

Como bien dices shao, el tiempo es 1 / fps teoricos, y lo que se hace internamente es que una vez que todo está ejecutado para el frame actual, antes de presentarlo se mira si ha transcurrido el tiempo establecido como delta, si no es así se espera a que pase el tiempo que falta y luego se actualiza el buffer de video y diversas cosas mas.
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: Delta time.

Postby shao » Tue Nov 10, 2015 9:12 am

Si, quizá set_fps hace algo parecido pero no estoy seguro de que sea así como dices, no se si para gemix el tiempo delta es fijo, podría ser que existan pequeñas variaciones.
Quiero decir que en un segundo a 60fps el tiempo entre frames no tiene por que ser el mismo, podría variar.
User avatar
shao
 
Posts: 6034
Joined: Wed Jun 17, 2009 4:51 pm

Re: Delta time.

Postby erkosone » Tue Nov 10, 2015 3:39 pm

Pues NO, y te lo pongo en mayusculas por que mira te explico mi experiencia personal..

He programado un secuenciador musical para iOS que empecé en gemix pero por diversos retrasos en las betas y los ports terminé portando a otro lenguaje junto con mas programas.
La cosa es que descubrí que gemix es el lenguaje con mas estabilidad en FPS que existe, en serio.. supera con creces incluso al motor de SDL oficial.

Hay muchas cosas que gemix no tiene, pero estabilidad y fiabilidad en que ese tiempo es EXACTO Y MUY PRECISO te doy fe de que es así, no se como lo ha programado CicTec pero es simplemente perfecto, no falla.

Te animo a que hagas la prueba ya no con otros divlikes si no con otros frameworks en C o Java.. es una pasada, gemix tiene una estabilidad muy alta en esto :)
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: Delta time.

Postby CicTec » Tue Nov 10, 2015 6:24 pm

Hola shao,

Como te dijo erkos, FPS ya hace algo similar internamente, y eso del delta-time que dices no es correcto, un juego o va a 60fps o a 30, ir a la misma velocidad a 30 que a 60 es una ilusion, porque lo que ves son menos fotogramas, por ejemplo durante 10 millisegundos ves la posicion de un objeto a 10,10 por ejemplo, despues otros 10millisegundos lo ves a 12,12, a 30 fps, primero lo ves a 10, 10 y despues lo veras a 20,20 por ejemplo.
User avatar
CicTec
 
Posts: 16553
Joined: Thu Jul 31, 2008 10:18 pm

Re: Delta time.

Postby shao » Tue Nov 10, 2015 8:20 pm

Claro, a 30 fps hay menos fotogramas fotogramas que a 60, eso es indiscutible, con la misma velocidad me refiero al desplazamiento de los sprites.

Por eso dije:

Es decir que se movería la misma distancia aun con menos fps, por eso se obtiene que el juego se movería igual de rápido a 60 que a 30 aunque obviamente a 30 el movimiento sería algo mas tosco.


A 60 fps, un sprite a 1 pixel por frame, en un 1 segundo habrá recorrido 60 pixeles.

Del modo que digo, a 30 fps también habrá recorrido 60 pixeles, pero lo habrá hecho más rápido, por eso digo que se conserva la velocidad, la de desplazamiento, no la de fps.
User avatar
shao
 
Posts: 6034
Joined: Wed Jun 17, 2009 4:51 pm

Next

Return to General

Who is online

Users browsing this forum: No registered users and 3 guests