Autor Tema: Obtener el tiempo en milisegundos?  (Leído 1802 veces)

SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12749
  • Karma: 375
Re:Obtener el tiempo en milisegundos?
« Respuesta #15 en: Noviembre 06, 2017, 02:25:01 pm »
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...
« última modificación: Noviembre 06, 2017, 02:26:38 pm por SplinterGU »
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

KeiDash

  • Jr. Member
  • **
  • Mensajes: 77
  • Karma: 3
  • https://twitter.com/AMelianRGD
    • Mi Web
Re:Obtener el tiempo en milisegundos?
« Respuesta #16 en: Noviembre 08, 2017, 08:32:54 pm »
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

  • Hero Member
  • *****
  • Mensajes: 12749
  • Karma: 375
Re:Obtener el tiempo en milisegundos?
« Respuesta #17 en: Noviembre 09, 2017, 03:18:19 am »
de nada
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Futu-block

  • Hero Member
  • *****
  • Mensajes: 2759
  • Karma: 34
  • Superviviente marciano
    • futublock
Re:Obtener el tiempo en milisegundos?
« Respuesta #18 en: Noviembre 09, 2017, 09:11:48 am »
ansiosos nos hayamos de ver el resultado ;)

Drumpi

  • Hero Member
  • *****
  • Mensajes: 6269
  • Karma: 159
  • Odio el periodo "entre proyectos"
    • La web de Drumpi
Re:Obtener el tiempo en milisegundos?
« Respuesta #19 en: Noviembre 16, 2017, 12:15:40 am »
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

  • Hero Member
  • *****
  • Mensajes: 2759
  • Karma: 34
  • Superviviente marciano
    • futublock
Re:Obtener el tiempo en milisegundos?
« Respuesta #20 en: Noviembre 16, 2017, 08:18:03 am »
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

  • Jr. Member
  • **
  • Mensajes: 77
  • Karma: 3
  • https://twitter.com/AMelianRGD
    • Mi Web
Re:Obtener el tiempo en milisegundos?
« Respuesta #21 en: Noviembre 16, 2017, 10:02:38 am »
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

  • Hero Member
  • *****
  • Mensajes: 6269
  • Karma: 159
  • Odio el periodo "entre proyectos"
    • La web de Drumpi
Re:Obtener el tiempo en milisegundos?
« Respuesta #22 en: Noviembre 17, 2017, 12:04:35 am »
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

  • Hero Member
  • *****
  • Mensajes: 2759
  • Karma: 34
  • Superviviente marciano
    • futublock
Re:Obtener el tiempo en milisegundos?
« Respuesta #23 en: Noviembre 17, 2017, 12:57:43 pm »
¡Cáspita! es verdan



KeiDash

  • Jr. Member
  • **
  • Mensajes: 77
  • Karma: 3
  • https://twitter.com/AMelianRGD
    • Mi Web
Re:Obtener el tiempo en milisegundos?
« Respuesta #24 en: Marzo 16, 2018, 09:14:10 am »
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

  • Hero Member
  • *****
  • Mensajes: 12749
  • Karma: 375
Re:Obtener el tiempo en milisegundos?
« Respuesta #25 en: Marzo 16, 2018, 11:56:39 am »
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

  • Jr. Member
  • **
  • Mensajes: 77
  • Karma: 3
  • https://twitter.com/AMelianRGD
    • Mi Web
Re:Obtener el tiempo en milisegundos?
« Respuesta #26 en: Marzo 16, 2018, 01:14:38 pm »
get_timer() son milisegundos desde que la aplicacion inicio

Representado por el reloj interno de la consola?

Ryo Suzuki

  • Full Member
  • ***
  • Mensajes: 143
  • Karma: 3
    • SEGASaturno
Re:Obtener el tiempo en milisegundos?
« Respuesta #27 en: Marzo 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!

SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12749
  • Karma: 375
Re:Obtener el tiempo en milisegundos?
« Respuesta #28 en: Marzo 19, 2018, 02:20:38 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

  • Hero Member
  • *****
  • Mensajes: 12749
  • Karma: 375
Re:Obtener el tiempo en milisegundos?
« Respuesta #29 en: Marzo 19, 2018, 02:21:37 am »
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