Tengo ratones mirando y caminando en mi juego, pero son muy lentos y difíciles de usar. Creo que es porque estoy usando velocidad fija. Escuché que en grandes proyectos los desarrolladores usan el tiempo delta. ¿Cómo calculo el tiempo delta en exceso? ¿Cómo calculo la velocidad usando el tiempo delta?
14
Respuestas:
El "tiempo delta" solía ser el tiempo transcurrido entre dos actualizaciones de trama (pero también se puede usar en otros contextos; esto generalmente es el resultado de una resta de tiempo).
Puede obtener el tiempo delta en glut utilizando el método glutGet y el parámetro GLUT_ELAPSED_TIME, más algunas operaciones.
La siguiente línea devuelve el número de milisegundos desde que se llamó a glutInit (o la primera llamada a glutGet (GLUT_ELAPSED_TIME)):
Entonces, si registra el tiempo actualSinceStart en cada bucle de representación, puede conocer el tiempo delta restando el antiguo al nuevo.
También puede hacerlo casi de la misma manera, utilizando la biblioteca C / C ++ ctime con clock () y la expresión de macro constante CLOCKS_PER_SEC que especifica la relación entre un tic del reloj y un segundo.
Básicamente, puede usar deltaTime para actualizar sus movimientos en proporción a este tiempo transcurrido en lugar de usar un valor de tiempo fijo. De esta manera, la velocidad de movimiento de tu personaje debería ser casi la misma si tu programa se ejecuta a 60 fps o si se ejecuta a 10 fps.
Aquí hay un pequeño ejemplo: suponga que desea mover algo 10 unidades por segundo en el eje x. Podría hacer algo como esto (si deltaTime usa milisegundos).
De esta manera, ya sea que su programa se actualice 2 o 100 veces, 1 segundo después, la posición debería ser casi la misma, y el juego se ve menos afectado por los bajos fps de una computadora pequeña que si usa valores fijos.
Con valores fijos ==> fps bajo = menos actualizaciones = movimientos lentos, mientras que fps alto = más actualizaciones = movimientos muy rápidos.
Con deltaTime ==> "casi" los mismos movimientos.
Finalmente, debe leer el paso de tiempo fijo frente al paso de tiempo variable en gamedev.stackexchange.
fuente
positive int
general, sube a 2.147.483.647 si está firmado y hasta 4.294.967.295 si no está firmado ... así que incluso si consideramos el más pequeño, 2.147.483.647 milisegundos son casi 25 días ... Debería ser suficiente para manejar la mayoría de los juegos temporizadores e incluso si no es suficiente, todavía podemos usar razonablementeunsigned int
(~ 50 días) o incluso unlong long
(como lo hago habitualmente).QueryPerformanceCounter
en Windows ygettimeofday
en la mayoría de los demás. Tendrá que ensuciarse las manos y apuntar a un poco más que el denominador menos común de las API de plataforma, especialmente en C y C ++.