Timer allegro !!Et pour quitter le prog apres ?

cs_Darksheep Messages postés 69 Date d'inscription samedi 4 novembre 2000 Statut Membre Dernière intervention 15 septembre 2009 - 11 févr. 2006 à 20:56
dletozeun Messages postés 546 Date d'inscription vendredi 13 février 2004 Statut Membre Dernière intervention 9 janvier 2008 - 12 févr. 2006 à 18:03
Bonjour, je commence à programmer avec allegro ;) mais voila je butte :
des que j'utilise un timer je n'arrive plus à quitter mon jeu !j'ai
beau défoncer la touche ESC ça marche pas!!! une portion de code :

#include

volatile long speed_counter = 0;

void increment_speed_counter()

{

speed_counter++;

}

END_OF_FUNCTION(increment_speed_counter);

void destroy_ressources();

BITMAP *buffer,*map,*colmap ;

BITMAP *pacman[8];

DATAFILE *data;



int main(int argc, char *argv[])

{





allegro_init();

install_keyboard();

install_timer();

LOCK_VARIABLE(speed_counter);

LOCK_FUNCTION(increment_speed_counter);

install_int_ex(increment_speed_counter, BPS_TO_TIMER(60));//Set our BPS

set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640,480,0,0);

data = load_datafile("data.dat");

set_palette((RGB*)data[eee].dat);

buffer = create_bitmap(640,480);

clear(buffer);

map = load_bitmap("bmps/Image6.bmp",NULL);

colmap = load_bitmap("bmps/collisions.bmp",NULL);

pacman[0] = load_bitmap("bmps/pacright.bmp",NULL);

pacman[1] = load_bitmap("bmps/pacright.bmp2",NULL);

pacman[2] = load_bitmap("bmps/pacleft.bmp",NULL);

pacman[3] = load_bitmap("bmps/pacleft.bmp2",NULL);

pacman[4] = load_bitmap("bmps/pacup.bmp",NULL);

pacman[5] = load_bitmap("bmps/pacup2.bmp",NULL);

pacman[6] = load_bitmap("bmps/pacdown.bmp",NULL);

pacman[7] = load_bitmap("bmps/pacdown2.bmp",NULL);

while(!key[KEY_ESC])//If the user hits escape, quit the program

{

while(speed_counter>0)

{

clear(buffer);

blit(colmap,buffer,0,0,0,0,640,480);

blit(buffer,screen,0,0,0,0,640,480);





speed_counter--;

}

}

destroy_ressources();

return 0; // Exit with no errors

}



END_OF_MAIN()

}

3 réponses

xboxut Messages postés 172 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 27 novembre 2009 1
12 févr. 2006 à 14:36
normal que tu puisse pas quitter -> tu rentre dans ton
while(speed_counter>0)
{


ton timer incrementre la variable speed_counter; manque de chance le blit prend pas mal de temp et l incrementation de ta varaiable speed_counter se fait plus rapidement que la decrémentation(speed_counter--;)
ce qui a pour effet d'avoir toujours speedcounter >0 . tu peut donc jamais sortir de ton while. met un timer de 100-200 msec ca devrait marcher .
enfin pour faire tourner ton prog a la meme vitesse , on utilise pas de while comme ca mais plutot des test if :) .
il y a une } en trop apres END_OF_MAIN(); aussi
aller @ ++
0
dletozeun Messages postés 546 Date d'inscription vendredi 13 février 2004 Statut Membre Dernière intervention 9 janvier 2008 1
12 févr. 2006 à 18:02
de toute facon c pas bon du tout cette methode parce que ca va dependre de la config...

Il ne dois y avoir que la fct increment_speed_counter() qui dois toucher a la variable speed_counter

Et puis a quoi ca te sert de faire 50000 blit a la seconde alors que dans ton while le buffer ne va pas chnger d'un poil...?



En fait il faut que tu fasse une boucle ( donc un while) pour la partie calcul de ton programme.

Donc au debut de la boucle tu fixe une autre variable (int calcul par
exemple)comme etant egale a celle du timer + n ( un nombre entier, par
exemple 200) et dans ton while tu mets while(calcul>speed_count) {
tu fais les calculs necessaires ...traimtement de l'image...de
l'interface, claviert etc...}



voila et des que le timer a depassé calcul , tu dessine ce que tu as a dessiner.

Et ensuite tu repars a zero en remettant calcul egal a
speed_counter+n...et ainsi de suite ( donc t'a un 2eme while qui
engloble tout ca, du genre while ( !touche_esc_appuyé)



voila
0
dletozeun Messages postés 546 Date d'inscription vendredi 13 février 2004 Statut Membre Dernière intervention 9 janvier 2008 1
12 févr. 2006 à 18:03
et j'ai oublié d'ajouter que tu ajuste toi meme ensuite la valeur de n pour que ca soit plus ou moins fluide...
0
Rejoignez-nous