Obtener el tiempo en milisegundos?

Started by KeiDash, November 03, 2017, 06:48:30 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

SplinterGU

#15
Quote from: panreyes on November 05, 2017, 10:55:17 AM
Pues yo vengo a contradeciros a todos y recomendarle que use timer.

En caso de que las FPS no sean estables, con timer no tendrá problemas pero con los contadores sí, teniendo en cuenta que la música no parará.

timer es una especie de contador, que se actualiza en cada frame... get_timer no depende de frame, es el valor en el momento...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

KeiDash

Perdón la tardanza en responder al tema pero he estado liado estos días.

Al final de momento, lo que estoy haciendo lo hago con contadores en bucles, contando a razón de los fps, tal cual me comentó Futu y Dumpi, usando (var_contador++; ) en ( set_fps(60,0); ).

Espero mostrar algo con fundamento en cosa de un mes.

Saludos y gracias a todos!!

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Futu-block

ansiosos nos hayamos de ver el resultado ;)

Drumpi

Lo cierto es que Panreyes ha sacado un punto importante: en este caso, la música NO se sincroniza con el resto del sistema. Al usar la librería de audio y tirar de tarjeta de sonido, una ralentización de la CPU podría provocar un desfase entre la música y el apartado visual, y un timer, o como dice Splinter, get_timer, te podría dar mayor estabilidad, siempre que tengas muy claro que no vas a trabajar con tiempos absolutos, sino posibles rangos.

En cambio, en la mayoría de los casos, como la velocidad de movimiento siempre se mide en pixels por frame, sí que es recomendable usar los contadores.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Futu-block

Eso me suena a hacer recortes de la cancion por trayectos para sincronizarlos...

A dia de hoy, un pc normal no debería dar problemas de relancización de ninguna manera, ¿no?

KeiDash

Es muy interesante todo esto que comentais la verdad, ahora mismo estoy en el punto de que tengo controlados los tiempos con contadores, y esta semana si sale todo bien, voy a añadir el audio a ver que tal se sincroniza.

La cosa es que estoy haciendo todo esto para Dreamcast, espero que rinda bien, de momento la carga no es grande en memoria así que por ese lado estoy tranquilo, ya me preocupa más como trabaje la librería en sí (mod_dream)

Drumpi

Futu, nunca sobreestimes las capacidades de un PC, que luego quieres portar tu juego a Wiz y te llevas una desagradable sorpresa :D

KeiDash: eso ya ni idea, mi experiencia con DC es muy limitada, pero si Wiz puede moverme "ese" proyecto, no veo por qué no un DDR (a menos que te hayas pasado con los VFX en el fondo :D)
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Futu-block


KeiDash

Buenas a todos,

Hace alrededor de dos meses que estoy trabajando con esto de "el tiempo" y crear una especie de cronómetro para poder trabajar con cantidades de tiempo de tipo Segundo, Décimas de segundo y centésimas de segundo.

Re-abro este post porque necesito ayuda de los profesionales en este sentido, ya que me las estoy viendo y deseando para poder "crear lo que quiero crear", expongo la base y luego el problema, a ver si alguien me puede dar otra vía para andar en este sentido o ver que desición tomo con el proyecto.

El juego

No se si alguno lo conocéis, mi intención es la de crear BeatTendency, un juego musical al más puro estilo Beatmanía. Las características de este juego por si alguno la desconoce es la de que una música se reproduce y al ritmo de la música, el usuario debe presionar las teclas para acertar las notas musicales en el momento preciso.

El momento preciso..

¿Cómo que el momento preciso? ¿A qué me refiero y qué quiere decir esto?

Esto quiere decir que, la música, reproduce unas notas musicales que serán las que el usuario debe acertar, y estas notas musicales tienen un tiempo muy marcado y muy específico, es decir:


  • La primera nota musical se reproduce en el segundo 7.44
  • La segunda nota musical se reproduce en el segundo 9.23
  • La tercera nota musical se reproduce en el segundo 11.12
  • La tercera nota musical se reproduce en el segundo 11.15

Quizás tu primer pensamiento pueda ser "hey..pero ¿Dónde está realmente el problema?"

Problema Nº1 - El cálculo de unidades de tiempo menores al segundo en BennuGd

En BennuGD por lo que tengo entendido hay dos vías para obtener tiempo

A) función getTime(), ésta devuelve un número enorme (universal) que debes transformar con fórmulas matemáticas para obtener horas, minutos y segundos. Mi duda con esta función es ¿De dónde obtiene esta función el tiempo? ¿Del reloj interno de la consola?

B) Cálculo por frames. Mi juego en este caso corre continuamente a 60fps, por lo que decidí tomar esta vía para calcular el tiempo ¿Cómo? Pues si cada 60fps es 1 segundo, para calcular por ejemplo el caso del segundo 11.12 hago lo siguiente (pseudo código):

11.12

segundos = (60 * 11)
désimas = (60 * (1 * 10) / 100)
centésimas = (60 * (2 * 100) / 100)

total = segundos + décimas + centésimas

Es decir, obtengo los ciclos que debe dar un bucle (60 vueltas de un bucle = 1Segundo) en base a un tiempo. El problema de esto es que no estoy seguro de que sea exacto, aunque lo he probado y es bastante aproximado.

¿Cuál es el problema entonces?

Problema Nº2 - El retraso de los elementos
A medida que se van mostrando notas musicales (hay un bucle que va dando vueltas y va preguntando a cada nota musical si le toca salir o no, en base a el tiempo en ciclos que se le ha asignado con la fórmula anterior) empieza a existir un retraso y las notas empiezan a descuadrar, aunque no se pierde velocidad de juego en ningún caso.

Este problema lo he resuelto manualmente, es decir, a cada tiempo asignado a las notas, lo arreglo dándole más o menos segundos a mano...un trabajo de chinos..

Y en esta tesitura me encuentro...no se como poder trabajar cómodamente ni se si la vía que he escogido es la correcta ni se si lo que quiero es posible.

Necesito vuestra ayuda ya que no se de otra solución para ello.

Gracias de antemano.

SplinterGU

time() son los segundos desde el 1 de enero de 1970
get_timer() son milisegundos desde que la aplicacion inicio
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

KeiDash

Quote from: SplinterGU on March 16, 2018, 11:56:39 AM
get_timer() son milisegundos desde que la aplicacion inicio

Representado por el reloj interno de la consola?

Ryo Suzuki

Creo que SlinterGU se refiere en PC.

O sea a ti me parece que no te serviría porque es desde cuando inicia el programa, si el usuario tarda x tiempo en dar a start, etc... creo que no puedes controlar ese tiempo.

Yo no tengo mucha idea, pero usaría contadores. Las pruebas que hice para controlar el loop de CDDA parecían tener mucha precisión como te había comentado creo Drumpi.

Seguro que pueden ayudarte con alguna otra idea o sugerencia algún otro compañero por aquí...

Ánimo!

SplinterGU

Quote from: KeiDash on March 16, 2018, 01:14:38 PM
Quote from: SplinterGU on March 16, 2018, 11:56:39 AM
get_timer() son milisegundos desde que la aplicacion inicio

Representado por el reloj interno de la consola?

milisegundos son milisegundos... independientemente de lo que hagas o haga la consola o pc, o lo que sea... son milisegundos relativos a cuando se inicio el programa...

no entiendo tu pregunta...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

Quote from: Ryo Suzuki on March 18, 2018, 08:51:17 PM
Creo que SlinterGU se refiere en PC.

O sea a ti me parece que no te serviría porque es desde cuando inicia el programa, si el usuario tarda x tiempo en dar a start, etc... creo que no puedes controlar ese tiempo.

Yo no tengo mucha idea, pero usaría contadores. Las pruebas que hice para controlar el loop de CDDA parecían tener mucha precisión como te había comentado creo Drumpi.

Seguro que pueden ayudarte con alguna otra idea o sugerencia algún otro compañero por aquí...

Ánimo!

no importa si pulsa start o no start, no depende de eso... es el tiempo en milisegundos desde que se inicio bennugd... no depende de nada, solo del paso del tiempo...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2