On fait TOUS cela ![]()
C´est de l´ultra vécu : des heures et des heures perdues a se demander pkoi il se passe un truc alors qu´on attend le reste :
et puis d´un coup, on voit, un + a la place d´un - ou un x a la place d´un y, looool ! !
Stupide erreur de copier/coller ![]()
Bon , la j´ai un problème avec la gestion du temps . .. je veux afficher une petite animation ( sprite ) , pour que mon eau soit plus réaliste . ..
J´ai regarde un tutorial sur le net ( prografix ) et je fais ceci :
http://rafb.net/paste/results/IzlHYd47.html
J´ai aussi une image Eau de 900*200 pixels , composee de 4 images de 225*200 pixels representant des cercles grandissant . ..
Elle , j´ai verifiee , elle est correctement chargee et affichee , donc l´erreur que j´ai ne vient ni de SDL_LoadBMP , ni de ma fonction SDL_BlitSurface . ..
Mais , lorsque je lance mon " jeu" , ces images ne sont pas affichées , tout se déroule comme si Eau n´existait pas . ..
Alors est-ce que cela vient de la gestion du temps ?
Euh . .. bon , en fait , en modifiant juste un peu la fonction , ( = au lieu de < ) , les images sont belle et bien affichées , mais . .. pas animées automatiquement :
c´est a dire qu´au debut , j´ai bien la premiere image de mon sprite, c´est a dire un tout petit cercle , mais pour " avancer " dans le sprite , je suis oblige d´appuyer sur une touche . ..
bizarre, ton algo semble bon
Vérifie si tu passes bien dans le if.
( tu mets un point d´arret en debug sur ton afficheimage)
Sinon, c´est que ça vient d´ailleurs ![]()
si il faut appuyer sur une touche, c´est que ta fonction pour afficher doit etre en dessous de la gestion des touches ?
Il faut que ce soit indépendant, limite que ta boucle principale soit :
while(1) / / ou condition que tu veux
{
get_touches();
upgrade_animations();
verifie_collisions();
dessine_tout();
}
tu vois, 4 fonctions bien distinctes ![]()
le probleme , c´est que ces n´importe quelle touche . .. meme la souris !
alors que je ne les gere pas
je poste mon programme , si quelqun accepte de m´aider , c´est super sympa ( il aura son nom dans le générique de jeu ^^ )
le main :
http://rafb.net/paste/results/UFe9iA85.html
le . cpp " affichage":
http://rafb.net/paste/results/ox1Rak89.html
voila ![]()
je sens que c´est encore une erreur débile , mais je ne sais pas bien " gerer le temps " , c´est mon premier jeu ^^
j´ai trouvé, c´est bien ce que je te disais : ton affichage est en dessous de l´appui des touches, voir n´importe quel evenement :
Tout ce qu´il y a dans ta boucle while :
while ( SDL_PollEvent(&2) )
n´est executé que si un evenement arrive.
Pkoi as tu tout mis DANS ce while ?
ferme ce while AVANT le :
/ / Tests des touches . ..
au lieu de le fermer apres le SDL_flip : vérifie tes accolades ![]()
Eheh , vous avez gagné votre nom dans les crédits du jeu , JYY ^^
beaucoup
mais j´ai encore une question
:
dans la zone de gestion du temps ( a partir de CurrentTime = SDL_GetTicks etc ) dans mon main.cpp ,
Il y a un probleme :
L´animation de l´eau s´effectue à toute vitesse , elle s´effectue , donc j´entre bien dans la boucle , mais a toute vitesse , donc y a un probleme avec CurrentTime et NextTime . ..
je sais ( on va dire pense ^^ ) que le probleme vient de ce que Current et Next sont egaux a SDL_GetTicks() , que je confond < et < , que j´ajoute 1 a current time mais je sais plus pourquoi etc , mais je suis completement perdu ![]()
Jamais d´égalité sur les temps : si ton ordi ralenti, il pourra etre 1 millieme + tard, et l´égalité ne sera pas faite :
remplace :
CurrentTime = SDL_GetTicks() +1;
if ( CurrentTime = NextUpdateTime )
{
AffichageEau(Frame);
Frame++;
if ( Frame > 4 )
{
Frame = 0;
}
NextUpdateTime +=1000;
}
par :
CurrentTime = SDL_GetTicks();
if ( CurrentTime > NextUpdateTime )
{
AffichageEau(Frame);
Frame++;
if ( Frame > 4 )
{
Frame = 0;
}
NextUpdateTime =CurrentTime+1000;
}
et n´oublie pas, au début, de mettre
NextUpdateTime = SDL_GetTicks();
Au debut de quoi ?
J´ai remplacé par ton code , mais le problème c´est que les animations ne sont pas affichées
je pense que le probleme vient du fait que CurrentTime ET NextTime sont égaux ( à SDL_GetTicks() ) , donc CurrentTime ne peut pas etre plus grand que NextTime . ..
je corrige :
CurrentTime = SDL_GetTicks();
if ( CurrentTime > NextUpdateTime )
{
Frame++;
if ( Frame > 4 )
{
Frame = 0;
}
NextUpdateTime =CurrentTime+1000;
}
AffichageEau(Frame);
dégage le " affiche" hors du if : en effet, si tu le mets dans le if, alors ça n´affiche que si tu changes de sequence, alors qu´il faut l´afficher en permanence ![]()
Eeeeeh ca marche ![]()
merci beaucoup : par contre , quand tu dis :
" et n´oublie pas, au début, de mettre
NextUpdateTime = SDL_GetTicks(); "
tu veux , dire , de l´enlever ? parceque , ca amrche si je l´enleve :p
merci ![]()
non, au contraire, laisse le, au début, c´est avant ton
while ( i == 0)
Tu vois que ça marche ![]()
en fait, les autres fois, c´est pas que ça n´affichait pas, c´est que ça affichait UNIQUEMENT quand ça changeait d´animation, autrement dit, ça devait afficher une animation 1 image sur 50 . ... donc tu n´y voyais pas ![]()
je t´assure que ca ne marche pas si j´ecris :
Uint32 NextUpdateTime = SDL_GetTicks();
au début de mon programme , en revanche , c´est parfait si on met :
Uint32 NextUpdateTime ;
bon bon, ben tant que ça marche ![]()
Salut à tous !
JeanYvesYves, j´ai visité ton site et je le trouve super. J´ai une question à te poser à propos du C++ mais qui n´a pas de rapport avec les Jeux Vidéos. C´est pour cela que j´ai essayer d´ajouter ton adresse msn à mes contacts mais tu n´est jamais connecté.
Voila je te remercie d´avance !
impossible de me connecter now : je suis au boulot : je passe juste de temps en temps sur le forum pour jeter un oeil ( faire des micro-pauses)
Si tu veux poser uen question : mail down ![]()
ok merci,
je t´envoie un mail
Je me posais une question :
est ce qu´il est plus rapide d´afficher un bmp ou de dessiner les pixels ?
je fais un casse brique , est ce que je dois plutot afficher chaque image bmp de brique , ou dessiner chaque brique pixels par pixels ?
Il ne doit pas y avoir une enorme différence , mais tant qu´a faire . ..
il y a une ENORME difference ! ! il faut monopoliser le moins possible les ressources graphique, donc quand t´es en 2D et que tu modifies ton affichage, tu cherches a blitter un maximum de gros trucs d´un seul coup. blitter un gros truc est beaucoup plus rapide que blitter plein de petits. C´est la regle premiere de l´affichage, que ce soit 2D ou 3D : batcher le plus possible