ComunidadID
Bienvenido a ComunidadID

¿Quieres promocionar tu videojuego?

Regístrate y publicalo 
en nuestros foros!


No estás conectado. Conéctate o registrate

Aplicar deltaTime en Fusion

    

Ver el tema anterior Ver el tema siguiente Ir abajo  Mensaje [Página 1 de 1.]

1CF2.5DEV Aplicar deltaTime en Fusion el 16/11/2016, 02:05

ProgramacionMX


Nivel: 4
Nivel: 4
Hola a todos.
Me a surgido una curiosidad. Si vienen de engines como Unity sabran de la función Time.deltaTime, esta función te da el lapso de tiempo transcurrido entre el frame actual y el frame anterior. Esta función se utiliza mucho cuando se va a simular física con las formulas básicas. Hace unos días estaba haciendo unas pruebas en Fusion, haciendo comparación entre que era mejor, si hacer retrasos con una variable contadora que se le vaya sumando 1 hasta que llegue a un determinado valor y luego regresarla a su valor inicial, o hacer el conteo mediante la variable "timer". Vi que el "timer" cuenta en milisegundos desde que se inicia la aplicación, pero tiene la desventaja de que cada ves que se resetea el temporizador, este valor también lo hace.
Mi pregunta es, seria posible hacer un deltaTime para Fusion?, y porque no he visto proyectos que cuando simulen física utilicen esta variable "timer"?, ya que siempre optan el usar fast loops para simular la gravedad por ejemplo.
Saludos.

2CF2.5DEV Re: Aplicar deltaTime en Fusion el 16/11/2016, 08:48

Zonacas


ADMINISTRADOR
ADMINISTRADOR
FPS? Frames per Second

Existe en Fusión una Expresión para sacar los FPS



También puedes variar lo fps en tiempo de ejecución (set frame rate)


hay opciones en propiedades que tiene que ver con los FPS

Machine-independent speed
Timer-based movements


También puedes crear una variable DeltaTime

Always  Flecha Derecha  Set DeltaTime to 1 / ( FrameRate + 0.0 )

y usarla con tus objetos

Always Flecha Derecha Active set PosX to PosX + 5 * DeltaTime


_________________
http://oskystudios.wix.com/osky-studios

3CF2.5DEV Re: Aplicar deltaTime en Fusion el 16/11/2016, 11:10

mataguiris


MODERADOR
MODERADOR
Delta Time, hasta donde sé, se usa para hacer eventos/acciones con independencia del frame rate, es decir, si tu le dices a un sprite que se mueva en x a una velocidad de 5, si el juego va a 60 FPS, se moverá a 5 de velocidad, pero si el FPS baja a 30 se moverá a 2.5 de velocidad. Delta time corrige esto, si le dices que se mueva a 5*DeltaTime, se moverá a esa velocidad independientemente del FPS del juego, corrigiendo así que vaya a distintas velocidades en según que pc.
Ahora, si baja de los 30FPS entonces hay problemas en el paraíso  lol!

En Fusión no sé como funciona esto, en Construct con poner por ejemplo " move x+5 *DT " ya lo tienes, aunque algunos behaviors ya vienen con DeltaTime incorporados, por ejemplo Bullet, que tiene un parámetro de velocidad que coge automáticamente a través de Delta Time.

[Tienes que estar registrado y conectado para ver este vínculo], si lo haces a través de una variable estás en las mismas, la velocidad variará dependiendo del frame rate.

http://mataguiris-games.weebly.com/

4CF2.5DEV Re: Aplicar deltaTime en Fusion el 16/11/2016, 12:00

Zonacas


ADMINISTRADOR
ADMINISTRADOR
Es que el Delta time depende del Frame Rate, como no va a depender?

Hay que calcular el deltatime dependiendo de los fps que tengas no?



Última edición por Zonacas el 16/11/2016, 12:14, editado 1 vez


_________________
http://oskystudios.wix.com/osky-studios

5CF2.5DEV Re: Aplicar deltaTime en Fusion el 16/11/2016, 12:11

mataguiris


MODERADOR
MODERADOR

[size=30]La expresión de sistema dt[/size]

La clave para la independencia de tasa de fotogramas es la expresión de sistema dtdt significa: delta-time (Tiempo delta). Delta significa un cambio en una cantidad, así que delta-time significa un cambio en el tiempo. Este es el tiempo, en segundos, desde el último tick (fotograma).
Por ejemplo, a 100 fps dt será 0,01 (centésimas de un segundo), y a 10 fps dtserá 0,1 (una décima parte de un segundo). En la práctica, dt varía tick a tick(fotograma a fotograma), por lo que es poco probable que sea exactamente el mismo valor durante largos períodos de tiempo.
Ten en cuenta que si añade dt a una variable por cada tick (fotograma), este se agrega 1 cada segundo, porque el tiempo entre todos los ticks (fotogramas) durante un período de 1 segundo se debe sumar 1! Aquí hay un ejemplomostrando precisamente eso. (Agregando dt a una variable de instancia de un objeto es también una manera útil de tener un contador de tiempo en un objeto.)

¿Cómo usar dt?

Por lo general, el movimiento dependiente de la tasa de fotogramas se hace con un evento como este:

Cada tick (una vez por fotograma), el objeto se mueve un píxel a la derecha. Ten en cuenta que a 30 FPS esto significa 30 píxeles por segundo, y a 60 FPS esto significa 60 píxeles por segundo. Son diferentes velocidades, dependiendo de la tasa de fotogramas.

Recuerda en el ejemplo anterior que dt siempre agrega hasta 1 por cada segundo. Así que si cambiamos el evento a lo siguiente:


... el objeto se mueve hacia la derecha a 60 píxeles por segundo en cualquier tasa de fotogramas. Ya que dt agrega hasta 1 por segundo, 60 *dt agrega hasta un máximo de 60 por segundo. Esto significa que a 30 FPS y 60 FPS nuestro objeto se mueve a la derecha 60 píxeles por segundo - la misma velocidad, independientemente de la tasa de fotogramas.

http://mataguiris-games.weebly.com/

6CF2.5DEV Re: Aplicar deltaTime en Fusion el 16/11/2016, 12:13

mataguiris


MODERADOR
MODERADOR
A mi me costó entenderlo, y todavía no lo entiendo muy bien  lol!

http://mataguiris-games.weebly.com/

7CF2.5DEV Re: Aplicar deltaTime en Fusion el 16/11/2016, 12:15

Zonacas


ADMINISTRADOR
ADMINISTRADOR
Pero el Delta time se calcula en función de a cuanto fps va el juego no?

imagino que construct 2 ya hace ese calculo

en Fusion se calcula asi sino me equiovoco

Set DeltaTime to 1 / ( FrameRate + 0.0 )

porque no hay una variable dt que haga esa función, la debes crear





[Tienes que estar registrado y conectado para ver este vínculo]


_________________
http://oskystudios.wix.com/osky-studios

8CF2.5DEV Re: Aplicar deltaTime en Fusion el 16/11/2016, 12:20

mataguiris


MODERADOR
MODERADOR
[Tienes que estar registrado y conectado para ver este vínculo] escribió:Pero el Delta time se calcula en función de a cuanto fps va el juego no?

imagino que construct 2 ya hace ese calculo

en Fusion se calcula asi sino me equiovoco

Set DeltaTime to 1 / ( FrameRate + 0.0 )


Ni idea, pero en Unity funciona igual, cuando trasteé Unity hace eones, ya me cosqué de lo de DeltaTime, y después en Construct igual, dan la misma explicación.

http://mataguiris-games.weebly.com/

9CF2.5DEV Re: Aplicar deltaTime en Fusion el 17/11/2016, 09:12

ProgramacionMX


Nivel: 4
Nivel: 4
Muchas gracias por su respuesta a ambos. Pues la formula de [Tienes que estar registrado y conectado para ver este vínculo] me funciono igual que la variable "timer", pero esta formula no se trastea cuando se resetea el timer.

Por lo que entiendo de todo esto del delta Time es que en Fusion en cada frame se hace una pasada a todos los eventos de arriba hacia abajo, antes yo ponía mis retrasos o delays sumándole 1 a una variable y en cada pasada de frame se iba sumando 1, pero si ahora uso el delta Time como lo dice [Tienes que estar registrado y conectado para ver este vínculo], quiere decir que ese tiempo será mucho mas lento?

Pues aparentemente puedo simular la física con las formulas de movimiento en la mecánica, aunque tengo unos lios con este, ya que puedo hacer que mi objeto se mueva 1m/S = 1 pixel por segundo, o hacer como una correcion del movimiento porque veo que s emueve muy lento.
Ahora tengo otra duda, yo utilizo la siguiente formula para hacer le movimiento mas realista:
d = Vot - g*t^2 / 2 , y al aplicarla, los datos calculados a mano concuerdan con los del programa, siempre aplicando la lógica de (pixel por segundo). Pero ahora esto lo quize aplicar con fast loops pero el movimiento lo realiza mucho mas rápido. Como la velocidad es el cambio de pixels por segundo, si tengo V = 6, entonces llamaría a un fast loop 6 veces que moviera el objeto un pixel. Pero lo que veo es que el programa no me respeta los tiempos como la formula anterior, yo quería hacerlo con fast loops ya que es un poco mas preciso a la hora de que un objeto colisione con un obstáculo, lo deje al ras de este, y con la formula me surgen problemas. Que puedo hacer para aplicar esta misma formula pero con fast loops?

10CF2.5DEV Re: Aplicar deltaTime en Fusion el 17/11/2016, 10:00

Zonacas


ADMINISTRADOR
ADMINISTRADOR
Vamos ver en Fusión lo del Delta Time parece que está implementado en las dos propiedades que te dije antes

Machine-independent speed
Timer-based movements


Pero si quieres puedes crearte el Delta Time con la formula esa

El delta Time es para asegurar que juego corre a la misma velocidad independientemente de la velocidad de fotogramas.

pero obviamente depende de los fotogramas, para ejecutar el código del Delta Time influye los FPS Obvio

Si hay muy pocos FPS el Delta Time no puede hacer nada, ira a saltos, es más que obvio

lo que se trata es que el juego vaya mas o menos igual en un ordenador lento que en un ordenador rápido, pero si es muy muy lento no hay nada que hacer, no se pueden hacer milagros, de donde no hay no se puede sacar.

Para actualizar la posición se utiliza el Delta time , pero a su vez también estas usando los FPS indirectamente o asi lo veo yo, hay que calcular el retraso en los fps la diferencia

lo que hace el Delta time es ajustar un poco eso


_________________
http://oskystudios.wix.com/osky-studios

11CF2.5DEV Re: Aplicar deltaTime en Fusion el 17/11/2016, 10:26

Zonacas


ADMINISTRADOR
ADMINISTRADOR
Explicación del foro de Clickteam

DELTA TIME

Es un Método de fabricación de eventos independientes de imágenes por segundo, lo que ayuda a evitar problemas de sincronización.


Digamos que un juego se ejecuta a 50 cuadros por segundo.

Con un retraso de 20 milisegundos entre cada fotograma.

Si tienes un evento  "Siempre" que mueve un objeto a 5 píxeles
significa que en 60 milisegundos, el evento se ejecutará 60/20 = 3 veces
y el objeto se moverá 5 x 3 = 15 píxeles.


Pero ahora, ¿y si el equipo es viejo y lento, y tarda 30 milisegundos entre cada fotograma?

Ahora en 60 milisegundos (tiempo real )
El evento "Siempre" se a ejecuta 60/30 = 2 veces
por lo que el objeto se mueve sólo 5 x 2 = 10 píxeles.




La solución es utilizar DELTA TIME  que funciona de esta manera:

En primer lugar, se mide el "DELTA TIME"
La cantidad de tiempo que ha transcurrido en el mundo real desde el último fotograma que se procesó.

A continuación, en lugar de mover el objeto 5 píxeles, lo movemos con el DeltaTime * 0,25 píxeles.

Ahora, como antes, si el juego se ejecuta a 50 fps
y el retardo entre cada fotograma ( Delta Time ) es de 20 milisegundos.

En 60 milisegundos, el evento se ejecuta 60/20 = 3 veces
y el objeto se mueve (20 * 0,25) * 3 = 15 píxeles
que es lo mismo que en el primer ejemplo.

Pero, ¿y si el retardo entre cada fotograma ( Delta Time ) se eleva a 30 milisegundos?
Ahora, el evento se ejecuta 60/30 = 2 veces
y el objeto se mueve (30 * 0,25) * 2 = 15 píxeles

por lo que en este tiempo, el objeto todavía se ha movido a la misma distancia y en la misma cantidad de tiempo , y está todavía muy bien sincronizado.


_________________
http://oskystudios.wix.com/osky-studios

Contenido patrocinado


Ver el tema anterior Ver el tema siguiente Volver arriba  Mensaje [Página 1 de 1.]

    

Permisos de este foro:
No puedes responder a temas en este foro.