T´as oublié les includes ! ! ^^
Rajoute en haut du prog : #include < stdio.h>
Ensuite, c´est pas plutôt
scanf("%e", &); à la place de
scanf("e%", valeur) ; ?
De plus tu as fait plusieurs erreurs de syntaxes, fais attention : tu as noté " care" * valeur alors que t´as variable se nomme " carre".
merci pour tout!!
je pige rien au variable et calcules... enfin si je pige mais pas tout ^^´
Voila
_[cOnkeR]_ > tu commences a bien te débrouiller ![]()
ou en es tu toi en ce moment ?
hugo42 > faut bien etre rigoureux sur tout
ps2M > précise ta question ! précise exactement ce que tu ne comprends pas dedans
Bon, j´ai reussi à résoudre mon premier problème seul. Mais j´en ai un autre mtn.
Tjs en SDL, je ne sais pas pourquoi mais les if et les else ne marche pas bien. ex
void CCompetence::fonct_VOL1(int securite) / /dans ce cas, exclusivement effraction pour l´instant
{
init_SDL();
/ / _
SDL_Surface* a; / /nom de la surface |
SDL_Surface* deverrouille; / /idem |
SDL_Surface* tjs_verrouille;//idem |
SDL_Surface* libre;// |
SDL_Rect rect1;//je dessine le rectangle de la surface verrouille |
SDL_Rect rect2;//deverrouille | tout ce qui
SDL_Rect rect3;//tjs_verrouille |
SDL_Rect rect4; / / |
rect4.x=350;// |
rect4.y=350;// | a rapport avec
rect1.x=350;// | le futur
rect1.y=350;// | affichage
rect2.x=250;// |
rect2.y=150;// |
rect3.x=250;// |
rect3.y=150;// |
int s=1; / / |
/ /_|
int XPVOL=8;//points d´XP de vol
int m_crochet=10;
bool sortir=false;
srand(time(NULL));
int hasard2=rand()%10;
if(securite>0)
while(!sortir)
{ SDL_PollEvent(&);
if(m_VOL+m_crochet-securite-hasard2>0)
{deverrouille=LoadBMP("deverrouille.bmp");
XPVOL *=2;
if(XPVOL>15)
m_VOL +=1;
sortir=true;
}
else
tjs_verrouille=LoadBMP("tjs_verrouille.bmp") ;
sortir=true;
}
if(securite == 0)
{
libre=LoadBMP("libre.bmp");
}
/ * SDL_BlitSurface(a,NULL,screen,&1); */
SDL_BlitSurface(deverrouille,NULL,screen,&2);
SDL_BlitSurface(tjs_verrouille,NULL,screen,&3)
;
SDL_BlitSurface(libre,NULL,screen,&4);
SDL_Flip(screen);
}
}
Lorsque je met ce code, si ca a reussi ce me met bien porte deverrouille, mais les autres ne marche pas!!!! De plus , lorsque ca me met " la serrure est deverrouille" il y a un écran noir qui s´affioche tout autour!!J´ai pourtant mes images dans le même repertoire que mon code!
Alors mes questions. Comment marche les if else avec SDL. Comment effacé l´écran noir autour de mon " serrure est deverouillé"
PS : je ne met pas la classe ici, ca ne servirait à rien
Et puis j´ai oublié de demander, comment je peux savoir quels sont les différents code assigné à chaque touche ( par exemple, pour entre c´est SDLK_RETURN)
Repondez moi stp
Excuseez moi de polluer ce topic mais il n´y a pas d´options editer.
Je voudrais préciser que dans l´image qui affiche " porte deverrouille" il n´y a pas d´ecran noir autour.
Vous auriez pas un ch´tit log´ pour faire des graphismes 2D pas trop nul?
bon, alors :
les if marchent pareil avec SDL ( heureusement)
mais je vois que quoiqu´il arrive tu blit les 3 : ( déverouille, tjs_verrouille et libre)
or tu les load dans les if ( donc y´a des fois ou ils ne sont pas chargés, mais pourtant tu les blit --> zone noire)
Pour effacer l´écran, je ne sais pas si SDL propose qq chose, mais je sais que dans la pratique, on n´efface pas l´écran : on blit le nouveau décor par dessus, et de partout --> gain de temps.
sinon, tu n´as qu´a carreler noir dans un 1er temps.
pour les touches, la doc officielle ![]()
voila le lien direct :
http://sdldoc.csn.ul.ie/sdlkey.php
et le lien référence :
http://www.libsdl.org
dans " doc project" a gauche
en ce qui concerne afficher une image sans la zone noire qu´elle porte, j´ai ça dans mon tuto :
http://www.fvirtman.fr.st
info/progs/tutoC++
§ 2.1.3 il me semble
sinon en ce qui concerne RAM ou VRAM pour ce qui va vite ou moins vite, tout dépend de ta carte graphique : regarde plutot la fonction LoadImage du §2.1.3
il y a des if qui testent s´il y a assez de VRAM
C bon ca marche!! il suffisait de les bliter au cas par cas(comme tu m´as dis de faire quoi). Par contre j´ai toujours ce probléme récurent. Ca me met un écran noir quand ca affiche le resultat. En plus, je ne peux pas revenir en arriere, je suis oblige de faire CTRL+ALT+SUPPR ! ! Tu pourrais pas me dire coment je fais pour bliter mon decors par dessus?(bon, je vais continuer à essayer mais je pose la question quand meme).
ais j´ai encore une question, comment je fais pour connaitre les numéros des couleurs ( comme toi tu as)??
Sinon, merci pour tes liens et pour tes réponses si rapides.
pour faire tes tests, enleve le mode FULLSCREEN
que tu vas trouver dans le code
je te laisse trouver : comment ça, ça te lance en mode fenetré, et tu peux cliquer sur la croix.
pour le code des couleurs, les logiciels de dessins permettent souvent de voir le code couleur.
je te laisse te renseigner sur la " synthese additive des couleurs" pour savoir comment les couleurs sont codées.
Un écran noir quand tu affiches le résultat ?
tu n´as pas tes " deverrouille" qui s´affichent ?
En fait, ca m´affiche un écran noir tout autour. Mais c´est pas du aux couleurs.Ca fait qu´au milieu j´"ai le deverrouille mais je n´ai plus rien d´autre. De plus, la touche entré ( qui est censé faire sortir le prog´ de la boucle) ne marche plus.
Sinon, j´ai oublié de demander, je sais pas pourquoi mais j´ai un probleme avec ce code là :
void vol()
{ init_SDL();
SDL_Rect rect;
SDL_Surface* vol_reussi ;
int sx=1,sy=1;
rect.x=250;
rect.y=250;
SDL_Surface* vol_rate;
SDL_Rect rect5;
rect5.x=250;
rect5.y=250;
srand(time(NULL));
int hasard=rand()%10;
if(hasard>3)
{
vol_reussi=LoadBMP("vol_reussi.bmp");
SDL_BlitSurface(vol_reussi,NULL,screen,&);
}
else
{
vol_rate=LoadBMP("cool.bmp");
SDL_BlitSurface(vol_rate,NULL,screen,&5);
}
SDL_Flip(screen);
}
Le truc c que ca me met le resultat 1/4 de secondes!! Je fais comment pour que ca se prolonge?
avec SDL_GetTicks()
Il te manque la boucle principale dans ton programme : un truc du genre ( pseudo-code ) :
while( on a pas demandé de quitter )
{
On calcule;
On affiche;
. ..;
}
Ton programme ne fait qu´un cycle et tombe direct sur la fin.
Je pense que c´est ca car tu n´as pas mis le main dans ton post.
Eh bine, dans mon code j´ai bien la boucle. Maios ce n´est pas le programme principal qui bugge mais la fonction. En fait le programme reste indefinniment ( a moins que j´appuie sur echap) Mais le resultat de ma fonction reste 1/4 de seconde. Et j´ai essaye de faire une boucle, mais ca ne marche pas. Je dois mal m´y prendre. Je fais un truc de ce genre :
if(hasard>3)
{while(1)
{
vol_reussi=LoadBMP("vol_reussi.bmp");
SDL_BlitSurface(vol_reussi,NULL,screen,&);
if(event.type==SDL_KEYDOWN&&.key.keysym.sym==
SDLK_TAB)
break;
}
}
else
{while(1)
{
vol_rate=LoadBMP("cool.bmp");
SDL_BlitSurface(vol_rate,NULL,screen,&5);
if(event.type==SDL_KEYDOWN&&.key.keysym.sym==
SDLK_TAB)
break;
}
}
SDL_Flip(screen);
}
Remarque je n´ai pas compile pour voir si ca marchait.
Ca ne marche pas chez moi ( pourtant ca devrait non?)
Je me sert plus de la SDL et je connais plus les fonctions.
Mais ton code la est moche, fait plutot :
if(hasard>3)
vol_reussi=LoadBMP("vol_reussi.bmp");
else
vol_rate=LoadBMP("cool.bmp");
while(1)
{
SDL_BlitSurface(vol_rate,NULL,screen,&5);
if(event.type==SDL_KEYDOWN&&.key.keysym.sym==
SDLK_TAB)
break;
}
SDL_Flip(screen);
}
}
Il faut que SDL_Flip soit à l´intérieur de ta boucle, sinon c´est normal que cela ne marche pas : il faut echanger tes buffers dans le double-buffering.
Lis un tuto sur la SDL pour plus d´infos ![]()