unity tutorial games libgdx

tutorial - Qué es un tiempo Delta en LIBGDX



libgdx vs unity (2)

¿Qué es un tiempo Delta en LIBGDX? Leí muchas publicaciones relacionadas con eso. Que yo sepa, el tiempo del Delta es,

  • El intervalo de tiempo entre el fotograma anterior y actual
  • el tiempo delta agregará hasta 1 ya que es el cálculo de x cuadros por segundo, es decir (1 / x de los cuadros)
  • Para que la velocidad sea constante para el juego, usamos dt

    Si decimos 60 * dt, entonces se moverá 60 cuadros por segundo, sin importar cuál sea la velocidad del móvil (por ejemplo).

    Entonces, esto es lo que sé sobre el tiempo delta, pero no estoy obteniendo una vista clara al respecto porque, ya sea para una actualización o un método de renderizado, estamos pasando el tiempo delta pero ¿en qué parte del código estamos especificando calcular por PER SEGUNDO?

Por ejemplo,

public void update(float dt) { float distance +=2*dt; }

¿este código se moverá 2 fotogramas por segundo? Si es así, ¿qué hará el código siguiente?

public void update(float dt) { .... } public void render(float delta) { update(delta); }

entonces, necesito respuestas para,

  • ¿Qué implica el código anterior?
  • ¿Qué está pasando realmente detrás del código?
  • ¿Por qué lo estamos haciendo?
  • ¿Dónde en este código estamos especificando que debe mover x fotogramas por segundo como el ejemplo anterior anterior?

    Puedo entender que el método de renderización está pasando el tiempo delta al método de actualización, pero necesito una visión clara al respecto. Lo siento si la pregunta parece estúpida, pero es muy difícil proceder sin saber realmente qué está sucediendo. ¡Cualquier ayuda sería genial!


Gdx.graphics.getDeltaTime() es el tiempo entre el inicio del anterior y el comienzo de la llamada actual a render() . También es el valor que obtienes en el método Screen#render() . Eso es. Sin magia negra o algo. Simplemente toma la hora actual y resta el tiempo anterior de ella. La unidad de este valor es segundos. Tenga en cuenta que no se suma a uno.

Entonces, si la vez anterior a la que se 6:51:30.0159512 pm el método fue a las 6:51:30.0159512 pm y la hora actual a la que se llama es a las 6:51:30.0324858 pm , la diferencia es de 0.0165346 seconds .

La velocidad (velocidad) se mide en "unidades" por segundo, por ejemplo, meter per second o corto: m/s . Si su automóvil viaja a 360 m/s el tiempo transcurrido es 0.0165346 s , entonces la distancia que ha recorrido en ese momento es 0.0165346*360 s*m/s => 5.952456 m , por lo que casi 6 metros.

Tenga en cuenta que esto es física básica, no es específica de libGDX. Si le resulta difícil de entender, entonces es posible que desee leer sobre la velocidad .

Para responder a sus preguntas de fondo, que creo que se trata de dividir su método de renderizado en un método de actualización por separado.

  • El código no implica nada
  • No hay nada detrás del código
  • Usar métodos cortos bien definidos es generalmente una buena práctica, léase: separación de preocupaciones
  • No hay ninguna pista de lo que quiere decir con "marco", pero la velocidad se multiplica por el tiempo para obtener la distancia

Es más simple de lo que crees que es. El tiempo delta es el número de segundos transcurridos desde la última llamada de renderizado. Dado que displacement = velocity * time , multiplica la velocidad de un objeto por el tiempo delta para ver cuánto se ha movido desde la última llamada al renderizado. La velocidad está en unidades por segundo. Puede ser una constante en su código o algo que calcule si se ve afectado por la aceleración. Las unidades de distancia que usas dependen de ti. Pueden ser metros, píxeles (no es una buena idea ya que varios dispositivos tienen diferentes dimensiones de pantalla) o alguna otra unidad de distancia arbitraria.

No tiene sentido decir que el tiempo delta suma hasta uno. No es más que la cantidad de segundos desde el último fotograma (por lo que suele ser mucho menor que 1.0).

Tampoco tiene sentido decir que quieres mover algo en cuadros por segundo. Desea mover algo algunas unidades de distancia por segundo.

Su primer ejemplo de código no es compilable. Pero si fueras a escribir algo como

myObject.position.x += 5*dt;

Esto significaría que su objeto se mueve horizontalmente a 5 unidades de distancia por segundo y por lo tanto está actualizando su posición horizontal en consecuencia.