21-08-2012, 03:49 PM
Il timer serve per capire quando è il momento di passare al frame (riferito all'animazione) successivo. Supponiamo che la tua animazione è composta da 5 frames: se li fai scorrere tutti di fila andrebbero a una velocità improponibile, se invece ti basi sui frame (es. tra 10 frames passo al frame successivo dell'animazione) la velocità dell'animazione cambia da computer a computer (a seconda del framerate). Basandoti sul tempo invece vai sul sicuro.
Solitamente le librerie grafiche mettono a disposizione una classe o qualche funzione per calcolare il tempo trascorso, ma siccome non conosco le allegro ti ho proposto la soluzione usando la libreria standard. La funzione clock ritorna il tempo trascorso dall'avvio del programma, quindi per calcolare il tempo impiegato per disegnare un frame devi controllare il tempo all'inizio del game loop, alla fine del game loop e sottrarre il secondo con il primo. Ed è esattamente quello che ho fatto nella bozza di codice che ti ho proposto.
Il tempo ricavato (ovvero il tempo impiegato per disegnare quel frame) lo passi alla funzione animationUpdate (che si preoccupa di cambiare il frame dell'animazione nel momento opportuno). Per sapere quando sono passati X millisecondi (che sarebbe deltaT) devi sommare il tempo del frame a una variabile (che ho chiamato time) che inizialmente vale 0. Dopodiché appena questa variabile time raggiunge (o supera) il tempo desiderato per il cambiamento del frame, sottrai il tempo desiderato a questa variabile (che sarebbe un modo più preciso per azzerare il timer) e cambi il frame dell'animazione.
Questo serve per eseguire un'animazione. Inizia a capire bene questo concetto e a provare a metterlo in pratica poi, se non capisci come fare, ti spiego un possibile modo per gestire più animazioni.
Se non hai capito bene qualcosa cerca di spiegare bene cos'è che non hai capito.
Solitamente le librerie grafiche mettono a disposizione una classe o qualche funzione per calcolare il tempo trascorso, ma siccome non conosco le allegro ti ho proposto la soluzione usando la libreria standard. La funzione clock ritorna il tempo trascorso dall'avvio del programma, quindi per calcolare il tempo impiegato per disegnare un frame devi controllare il tempo all'inizio del game loop, alla fine del game loop e sottrarre il secondo con il primo. Ed è esattamente quello che ho fatto nella bozza di codice che ti ho proposto.
Il tempo ricavato (ovvero il tempo impiegato per disegnare quel frame) lo passi alla funzione animationUpdate (che si preoccupa di cambiare il frame dell'animazione nel momento opportuno). Per sapere quando sono passati X millisecondi (che sarebbe deltaT) devi sommare il tempo del frame a una variabile (che ho chiamato time) che inizialmente vale 0. Dopodiché appena questa variabile time raggiunge (o supera) il tempo desiderato per il cambiamento del frame, sottrai il tempo desiderato a questa variabile (che sarebbe un modo più preciso per azzerare il timer) e cambi il frame dell'animazione.
Questo serve per eseguire un'animazione. Inizia a capire bene questo concetto e a provare a metterlo in pratica poi, se non capisci come fare, ti spiego un possibile modo per gestire più animazioni.
Se non hai capito bene qualcosa cerca di spiegare bene cos'è che non hai capito.