Estoy escribiendo un juego ASCII DOS-Prompt de la vieja escuela. Honestamente estoy tratando de emular ZZT para aprender más sobre esta marca de diseño de juegos (incluso si es anticuado)Juegos ASCII DOS - Métodos de representación
Estoy bien, tengo mi modo de texto de pantalla completa para trabajar y puedo crear mundos y moverme alrededor sin problemas PERO no puedo encontrar un método de tiempo decente para mis renders.
Sé que mi renderización y el código de pre representación son rápidos porque si no agrego ningún delay() s o (clock() - renderBegin)/CLK_TCK comprueba desde time.h que los renders son increíblemente rápidos.
No quiero utilizar delay() porque es mi plataforma de conocimiento específica y además de eso no puedo ejecutar ningún código mientras se demora (como la entrada y el procesamiento del usuario). Así que decidí hacer algo como esto:
do {
if(kbhit()) {
input = getch();
processInput(input);
}
if(clock()/CLOCKS_PER_SEC-renderTimer/CLOCKS_PER_SEC > RenderInterval) {
renderTimer = clock();
render();
ballLogic();
}
}while(input != 'p');
Lo que debería funcionar en "teoría" bien. El problema es que cuando ejecuto este código (estableciendo RenderInterval en 0.0333 o 30 fps) no obtengo DONDEQUIERA cerca de 30 fps, obtengo más como 18 al máximo.
Pensé que tal vez intentaría configurar el RenderInterval en 0.0 para ver si el rendimiento empezaba ... no lo hizo. Estaba (con un RenderInterval de 0.0) obteniendo un máximo de ~ 18-20 fps.
Creo que, como estoy continuamente llamando a todos estos métodos clock() y "divide esto por eso", estaba ralentizando la CPU algo aterrador, pero cuando tomé el renderizado y ballLogic invocó los corchetes de la sentencia if y establezco RenderInterval en 0.0 obtengo, de nuevo, renderizaciones sorprendentemente rápidas.
Esto no tiene sentido para mí, ya que si salí de la verificación de si, ¿no debería funcionar igual de lento? Quiero decir que todavía tiene que hacer todos los cálculos
Por cierto que estoy compilando con de Turbo C++ V1.01
ZZT! Me encantó ese juego. – caf
Tú y yo ambos, caf. ('#throwstar seek'). @ Parad0x13: Si no te importa alejarte de DOS, escribí una biblioteca para emular este estilo gráfico en cualquier plataforma compatible con SDL: http://libfake437.googlecode.com –
Si almacenas el resultado de 'clock () 'y asigne el valor almacenado, guardará una llamada (el código más rápido es el que no llama) y será más preciso (de lo contrario, perderá el tiempo entre la primera llamada' reloj() ' , hizo todas las matemáticas y manejó la rama). Esta pérdida de precisión hará que el juego funcione más despacio de lo que desee, incluso si ya no está maximizando el uso de la CPU. (Editar: jaja, acabo de ver la fecha en esto, bueno) –