Sto scrivendo un gioco ASCII DOS-Prompt della vecchia scuola. Onestamente sto cercando di emulare ZZT per saperne di più su questo marchio di game design (anche se è antiquato)Giochi ASCII DOS - Metodi di rendering
Sto bene, ho fatto funzionare la mia modalità di testo a schermo intero e posso creare mondi e spostare in giro senza problemi, ma non riesco a trovare un metodo di temporizzazione decente per i miei rendering.
So che il mio rendering e il codice di pre-rendering è veloce perché se non aggiungo alcun ritardo() s o (clock() - renderBegin)/CLK_TCK controlla da time.h i rendering sono incredibilmente veloci.
Non voglio usare delay() perché è per la mia piattaforma di conoscenza specifica e per di più non posso eseguire alcun codice mentre ritarda (come l'input e l'elaborazione dell'utente). Così ho deciso di fare qualcosa del genere:
do {
if(kbhit()) {
input = getch();
processInput(input);
}
if(clock()/CLOCKS_PER_SEC-renderTimer/CLOCKS_PER_SEC > RenderInterval) {
renderTimer = clock();
render();
ballLogic();
}
}while(input != 'p');
Quale dovrebbe in "teoria" funzionare bene. Il problema è che quando eseguo questo codice (impostando RenderInterval su 0.0333 o 30fps) non riesco quasi ad avvicinarmi a 30fps, ne ottengo più di 18 al massimo.
Ho pensato che forse avrei provato a impostare RenderInterval su 0.0 per vedere se la performance era stata avviata ... no. Ero (con un RenderInterval di 0.0) ottenendo a max ~ 18-20fps.
Anche se forse poiché continuo a chiamare tutti questi metodi clock() e "divide questo per quello" stavo rallentando la CPU, qualcosa di spaventoso, ma quando ho preso il rendering e ballLogic richiama le parentesi dell'istruzione if e imposta RenderInterval su 0.0 Ottengo, ancora, rendi incredibilmente veloci.
Questo non ha senso per me dal momento che se ho lasciato il check in, non dovrebbe funzionare altrettanto lento? Voglio dire che ha ancora a che fare tutti i calcoli
BTW sto compilazione con Borland Turbo C++ V1.01
ZZT! Ho adorato quel gioco. – caf
Io e te entrambi, caf. ('ricerca #throwstar'). @ Parad0x13: Se non ti dispiace allontanarti dal DOS, ho scritto una libreria per emulare questo stile grafico su qualsiasi piattaforma supportata da SDL: http://libfake437.googlecode.com –
Se memorizzi il risultato dall'orologio () "e assegnando il valore memorizzato, salvi una chiamata (il codice più veloce è il codice che non chiami) e sarà più preciso (altrimenti perdi l'intervallo tra la prima volta che hai chiamato" clock() " , ha fatto tutta la matematica e ha gestito il ramo). Questa perdita di precisione renderà il gioco più lento di quello che vuoi, anche se non stai più esaurendo l'utilizzo della CPU. (modifica: haha, ho appena visto la data su questo, vabbè) –