Timer avec allegro

Résolu
Florian_88 Messages postés 14 Date d'inscription dimanche 17 juillet 2005 Statut Membre Dernière intervention 25 novembre 2015 - Modifié le 4 sept. 2005 à 19:41
Florian_88 Messages postés 14 Date d'inscription dimanche 17 juillet 2005 Statut Membre Dernière intervention 25 novembre 2015 - 4 sept. 2005 à 19:41
Salut a tous, voila j'ai commencer un projet de jeux de plate-forme avec allegro mais j'ai un probleme avec les timers je ne comprend pas du tout comment les initialisers et comment les utilisers donc si quelqu'un pouvait me renseigner ce serait sympa en plus c'est le seul truc qui frene le projet donc je fouille je fouille dans l'API mais je cale toujours pas, donc si vous s'avez a vos clavier.

De plus si vous étes interesser par le projet ( qui est tout jeune ) mailer moi:

<email supprimé par la modération>

9 réponses

xboxut Messages postés 172 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 27 novembre 2009 1
3 sept. 2005 à 10:16
salut pour creer des timer avec allegro rien de lpus facile,tu doit cree une fonction qui sera appélée toute les X temps.Pour ne pas deregler le timer tout le bardas de ta fonction devra etre tres rapide ainsi pour mettre un timer standard tu declare une fonction :
 int countanim=0;//variable a incrementé
void animatecount()//ma fonction timer 
{
countanim++;
}
END_OF_FUNCTION(animatecount);// macro sensé assurer la compatibilite sur toute les plateforme

puis dans ton code tu initialise les timers
 LOCK_VARIABLE(countanim);
  LOCK_FUNCTION(animatecount);
/* ces deux macro serve a locker la memoire pour eviter les crash sous dos , si tu programme sous win et alleg il est pas obligatoire de les utiliser*/

install_int_ex(animatecount,MSEC_TO_TIMER(80));
/* cette fonction sert a initialiser le timer , a partir de ce moment,toute les 80 millisecondes, la fonction enimatecount sera exécuté et la variable countanim incrémenté*/
/* a noter qu il existe plusieur macro pour le second paramete de cette fonction 
SECS_TO_TIMER(secs)  - give the number of seconds between
                             each tick
      MSEC_TO_TIMER(msec)  - give the number of milliseconds
                             between ticks
      BPS_TO_TIMER(bps)    - give the number of ticks each second
      BPM_TO_TIMER(bpm)    - give the number of ticks per minute
*/


voila c fini rien de plus simple si tu veux d otre precision demande moi

m enfin ca c le b a ba d alegro , en plus tout est expliqué dan la doc dans la rubrique timer.
tu trouvera la doc sur www.allegro.cc section file tout en bas de la page (prend en chm ;) )
3
xboxut Messages postés 172 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 27 novembre 2009 1
4 sept. 2005 à 15:03
non lol kan meme :) mais tu peux la creer ta boucle j te donne une idée:


<HR>

int moncompteur=0;
void fractiontemps()//ma fonction timer
{
moncompteur++;
}

<HR>

puis par exemple

<HR>
install_int_ex(fractiontemps,MSEC_TO_TIMER(33));
while(!key[KEY_ESC])
{
if(moncompteur==1)
{

ton code
moncompteur=0;
}
}

<HR>
voila si tu veux faire un jeu je te conseille surtout pas cette methode pour reguler le nombre de fps, si tu comprend pas mon code demande moi mais en gros le truc c d attendre que fractiontempssoit appelé pour qu il incremente moncompteur qui etait a 0.lorsque mon compteur est incrementé il aut 1 et le test if dans ta boucle est vrai,ton code est executé.avant de sortir du if tu remet moncompteur a 0 pour que lors du prochain cycle ton test soit faux.il sera afux jusqu au prochain appel de fractiontemps.
voila @ ++
3
xboxut Messages postés 172 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 27 novembre 2009 1
3 sept. 2005 à 10:17
dsl j ai eu un ptit probleme ac la textbox de cs :'(
0
Florian_88 Messages postés 14 Date d'inscription dimanche 17 juillet 2005 Statut Membre Dernière intervention 25 novembre 2015
3 sept. 2005 à 14:43
Merci, c'est exactement ce que je voulais, j'avais telecharger la doc mais comme elle est en anglais j'avais vraiment rien comprix, c'est chose régler.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Florian_88 Messages postés 14 Date d'inscription dimanche 17 juillet 2005 Statut Membre Dernière intervention 25 novembre 2015
4 sept. 2005 à 14:47
Et si je veux une boucle qui tourne a une cadence de 30 tour par seconde, y'a t'il une fonction prevue dans allegro
0
Florian_88 Messages postés 14 Date d'inscription dimanche 17 juillet 2005 Statut Membre Dernière intervention 25 novembre 2015
4 sept. 2005 à 15:18
Merci, je pense avoir compris ( enfin j'espere ), si j'ai un probleme je t'en fait pars mais je pense que ca ira
0
Florian_88 Messages postés 14 Date d'inscription dimanche 17 juillet 2005 Statut Membre Dernière intervention 25 novembre 2015
4 sept. 2005 à 18:32
voici mon code,



========================================================

#include

#define BPS 120



int moncompteur=0;



void fractiontemps()//ma fonction timer

{

moncompteur++;

}



int game(void)

{

BITMAP *decor_ciel;

BITMAP *decor_montagne;

BITMAP *platforme;

BITMAP *collision;

BITMAP *buffer;



int decor_ciel_pos = 0;

int decor_montagne_pos = 0;

int platforme_pos = 0;

int perso_hauteur = 0;



decor_ciel = load_bmp("ciel.bmp",NULL);

decor_montagne = load_bmp("montagne.bmp",NULL);



buffer = create_bitmap(800,600);



install_int_ex(fractiontemps,BPS_TO_TIMER(BPS));



while(!key[KEY_ESC])

{

if ( moncompteur == 1 )


{


if ( key[KEY_RIGHT ] ) // que fait on si la touche droite vaut 1 hmn hmn

{

decor_ciel_pos = decor_ciel_pos + 1;// c'est le decor que l'on bouge tt le tps

decor_montagne_pos = decor_montagne_pos + 5;

}



if ( key[KEY_LEFT] )

{

decor_ciel_pos = decor_ciel_pos - 1;

decor_montagne_pos = decor_montagne_pos - 5;

}



// On affiche tt

blit(decor_ciel, buffer,decor_ciel_pos,0,0,0, 800,600);

masked_blit(decor_montagne, buffer, decor_montagne_pos,0,0,0, 800, 600);

rectfill(buffer, 400, 550, 450 , 600, 8542134 );

blit(buffer, screen, 0, 0, 0, 0, 800, 600);



moncompteur = 0;



}





}

}

=====================================================

Ca marche ca fait comme dans mario bros, le ciel avance moin vite ke la
montagne et le perso reste au centre, mais voila ca marche juste
pendant 10 - 20 seconde puis le programme ce bloque :'-( peut
etre sait tu d'ou cela vient.



Bcp de bitmap sont declarer mais pa utiliser elle le seront quand j'aurai fait tout les decors
0
xboxut Messages postés 172 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 27 novembre 2009 1
4 sept. 2005 à 18:50
oui je sais pourquoi ca se bloque lol
if ( moncompteur == 1 )
remplace ca par :
if ( moncompteur >= 1 )
0
Florian_88 Messages postés 14 Date d'inscription dimanche 17 juillet 2005 Statut Membre Dernière intervention 25 novembre 2015
4 sept. 2005 à 19:41
C'est bon ca marche nikel, merci.
0
Rejoignez-nous