Discussion:
[OT] Frame rate constante
(demasiado antiguo para responder)
Showtime
2003-11-22 21:37:26 UTC
Permalink
Hola. Antes que nada, disculpas por el off-topic. Tengo una duda y no sabía
dónde plantearla.

Estoy haciendo un jueguillo en C, y forzosamente debe compilar en Borland
C++ 3.1 (antediluviano) y para DOS puro. El problema que tengo es que no sé
si existe un método más o menos estándar para lograr que el juego vaya a la
misma velocidad en un 486 que en un Pentium 4.

¿Debo usar timers? Los timers de BC++ 3.1 se basan en el timer de la BIOS,
que salta cada 55 ms, con lo que lo máximo que se consiguen son 18,2 FPS.
Supongo que podría dar dos pasadas al bucle del juego por cada tick del
timer, con lo que se doblarían. Creo que se también se puede reprogramar el
timer, aunque he leído que no es muy recomendable.

La función delay tiene una precisión de 1 milisegundo, pero no es una buena
opción porque dependiendo de la máquina los cálculos del juego se
ejecutarían más o menos rápido, con lo que seguiría siendo dependiente de la
máquina.

También supongo que podría usarse algo como

contador=0
while (!fin_juego)
{
contador++;
if (contador==5000)
{
//actualizar juego
contador=0;
}
}

Donde el valor "5000" en el ejemplo sería variable y se estimaría de algún
modo.

Agradecería cualquier ayuda sobre cuál es la mejor opción a usar.

saludos y gracias de antemano
GasparV
2003-11-23 23:45:19 UTC
Permalink
On Sat, 22 Nov 2003 22:37:26 +0100, "Showtime"
Post by Showtime
para lograr que el juego vaya a la
misma velocidad en un 486 que en un Pentium 4.
Yo creo que, al arrancar, puedes comprobar la velocidad midiendo entre
dos 'clics' de teclado. Por ejemplo, las vueltas que da un lazo. Ese
mismo número, luego, lo usarías para ralentizar la ejecución.




http://saludos.de/gaspar
Palma.
Martin J. Sanchez
2003-11-24 09:55:05 UTC
Permalink
On Sat, 22 Nov 2003 22:37:26 +0100, "Showtime"
Post by Showtime
Hola. Antes que nada, disculpas por el off-topic. Tengo una duda y no sabía
dónde plantearla.
Estoy haciendo un jueguillo en C, y forzosamente debe compilar en Borland
C++ 3.1 (antediluviano) y para DOS puro. El problema que tengo es que no sé
si existe un método más o menos estándar para lograr que el juego vaya a la
misma velocidad en un 486 que en un Pentium 4.
¿Debo usar timers? Los timers de BC++ 3.1 se basan en el timer de la BIOS,
que salta cada 55 ms, con lo que lo máximo que se consiguen son 18,2 FPS.
Supongo que podría dar dos pasadas al bucle del juego por cada tick del
timer, con lo que se doblarían. Creo que se también se puede reprogramar el
timer, aunque he leído que no es muy recomendable.
Aunque no sea recomendable reprogramar el timer (8253 o 8254), si que
podrias leer su contendido, con lo que obtendrias una resolucion
bastante alta 1/(18.2*65536) seg., esto funciona incluso en emulacion
DOS bajo nt/2000. Otra solucion purde ser reprogramar el RTC para que
genere una interrupcion periodica.

Un saludo,
Martin.
César
2003-11-24 21:39:05 UTC
Permalink
Podrías utilizar el tiempo que se tarda entre cada retrazado vertical
para establecer un número de frames constante, y a partir de ello
sincronizar toda la aplicación.
Sé que con vesa hay algún servicio que te dice cuando se está haciendo
el retrace, aunque ahora no recuerdo.

Un saludo, César.

Loading...