effectivement j´avais effacé les étoiles ( quel niguaud ! )
sinon autre erreur :
cannot find -lSDL
assure toi que tu as bien libsdl.a dans ton repertoire lib de devC++....
( je sens que tu vas encore etre nigaud la ! )
. .. non non il y est bien ( cassé ! )
il y a quelques fichiers dans le ZIP que ( il me semble) je n´ai pas décompréssé , ce sont les fichiers libSDL.a et . al et sdl.m4
" assure toi que tu as bien libsdl.a"
" je n´ai pas décompréssé " : " libSDL.a"
Qu´on me dise ou est le piege la ? ???
Décompresse les patate ! ! ![]()
et tu les fous dans le repertoire lib
c´est bon j´ai résolé le problème
au fait , mon patate que je suis , j´avais compris : " décompressez LE fichier . a . .." donc je n´avais pris que le 1e que j´ai vu , bref c´est bon . ..
bon je continue mon API Windows moi . .. j´essaye de résoudre un problème bien enervant , si dans 10 minutes j´ai pas réussi je t´appelle !
essaie déja de faire marcher l´exemple ![]()
si je t´ai dis que j´ai resolu le problème c´est que j´ai essayé de faire marcher l´exemple . .. voyons !
bon je vais au toilettes je reviens . ..
j´ai foullié dans ce topic, je suis arrivé sur page 57, et la, je vais essayer de jaire deplacer, car je croit que ca va etre bon, JYY a expliqué a giga quelque chose plein de truc, et voila.
J´ai arrangé le truc mais cela ne marche pas comme je le voudrais. Deux images doivent bouger
Je ne sais pas comment differancier les deux, car elles bougeaient en meme temps, sur la meme place, et vu qu´elles avaient la meme forme, on ne pouvait que voir 1 image.Alors, pour arranger cela, j´ai doublé tout, et cela donne deux boucles while.
SDL_Surface* screen;
SDL_Surface* fond;
SDL_Surface* barregauche;
SDL_Surface* barredroite;
SDL_Event event;
void init_SDL()
{
SDL_Init(SDL_INIT_VIDEO);
screen = SDL_SetVideoMode(1024, 768, 32,SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_FULLSCREEN);
SDL_ShowCursor(0);
}
SDL_Rect Rect(int x,int y,int w=0,int h=0)
{
SDL_Rect r;
r.x=x;
r.y=y;
r.w=w;
r.h=h;
return r;
}
SDL_Surface* LoadBMP(char* fichier,int vram=1)
{
SDL_Surface* f = SDL_LoadBMP(fichier);
SDL_Surface* r=NULL;
if ( vram)
r=SDL_CreateRGBSurface(SDL_HWSURFACE, f->w, f->h, 32, 0, 0, 0, 0);
if ( r==NULL) vram=0;
if ( !vram)
r=SDL_CreateRGBSurface(SDL_SWSURFACE, f->w, f->h, 32, 0, 0, 0, 0);
SDL_Rect R=Rect(0,0,f->w,f->h);
SDL_BlitSurface(f,NULL,r,&);
SDL_FreeSurface(f);
return r;
}
int main(int argc , char **argv)
{
int s=1;
int sx=1,sy=1;
SDL_Rect rect1;
int fini=0;
init_SDL();
fond=LoadBMP("fond.bmp");
rect1.x = 0;
rect1.y = 0;
SDL_BlitSurface(fond,NULL,screen,NULL);
barregauche=LoadBMP("barre joueur 1.bmp",0);
rect1.x=20;
rect1.y=333;
SDL_SetColorKey(barregauche,SDL_SRCCOLORKEY , SDL_MapRGBA(barregauche->format,255,0,255,0));
while(1)
{
SDL_PollEvent(&);
if ( event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_ESCAPE)
break;
if ( event.type == SDL_KEYDOWN)
{
if ( event.key.keysym.sym == SDLK_UP) rect1.y-=3;
if ( event.key.keysym.sym == SDLK_DOWN) rect1.y+=3;
}
SDL_BlitSurface(barregauche,NULL,screen,&1);
SDL_Flip(screen);
}
barredroite=LoadBMP("barre joueur 2.bmp",0);
rect1.x=300;
rect1.y=333;
SDL_SetColorKey(barredroite,SDL_SRCCOLORKEY , SDL_MapRGBA(barredroite->format,255,0,255,0));
while(1)
{
SDL_PollEvent(&);
if ( event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_ESCAPE)
break;
if ( event.type == SDL_KEYDOWN)
{
if ( event.key.keysym.sym == SDLK_a) rect1.y-=3;
if ( event.key.keysym.sym == SDLK_q) rect1.y+=3;
}
SDL_BlitSurface(barredroite,NULL,screen,&1);
SDL_Flip(screen);
}
SDL_ShowCursor(1);
SDL_Quit();
return 0;
}
J´ai essayé un autre systeme mais l´ecran devient noir 1 seconde puis revient a l´etat ´origine, c´est a dire rien, mais il n´y a aucune erreur :
SDL_Surface* screen;
SDL_Surface* fond;
SDL_Surface* barregauche;
SDL_Surface* barredroite;
SDL_Event event;
void init_SDL()
{
SDL_Init(SDL_INIT_VIDEO);
screen = SDL_SetVideoMode(1024, 768, 32,SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_FULLSCREEN);
SDL_ShowCursor(0);
}
SDL_Rect Rect(int x,int y,int w=0,int h=0)
{
SDL_Rect r;
r.x=x;
r.y=y;
r.w=w;
r.h=h;
return r;
}
SDL_Surface* LoadBMP(char* fichier,int vram=1)
{
SDL_Surface* f = SDL_LoadBMP(fichier);
SDL_Surface* r=NULL;
if ( vram)
r=SDL_CreateRGBSurface(SDL_HWSURFACE, f->w, f->h, 32, 0, 0, 0, 0);
if ( r==NULL) vram=0;
if ( !vram)
r=SDL_CreateRGBSurface(SDL_SWSURFACE, f->w, f->h, 32, 0, 0, 0, 0);
SDL_Rect R=Rect(0,0,f->w,f->h);
SDL_BlitSurface(f,NULL,r,&);
SDL_FreeSurface(f);
return r;
}
int main(int argc , char **argv)
{
int s=1;
int sx=1,sy=1;
SDL_Rect rect1;
int fini=0;
init_SDL();
fond=LoadBMP("fond.bmp");
rect1.x = 0;
rect1.y = 0;
barregauche=LoadBMP("barre joueur 1.bmp",0);
rect1.x=20;
rect1.y=333;
SDL_SetColorKey(barregauche,SDL_SRCCOLORKEY , SDL_MapRGBA(barregauche->format,255,0,255,0));
barregauche=LoadBMP("barre joueur 2.bmp",0);
rect1.x=120;
rect1.y=333;
SDL_SetColorKey(barredroite,SDL_SRCCOLORKEY , SDL_MapRGBA(barredroite->format,255,0,255,0));
while(1)
{
SDL_PollEvent(&);
if ( event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_RETURN)
break;
if ( event.type == SDL_KEYDOWN)
{
if ( event.key.keysym.sym == SDLK_UP) rect1.y-=3;
if ( event.key.keysym.sym == SDLK_DOWN) rect1.y+=3;
}
SDL_BlitSurface(fond,NULL,screen,NULL);
SDL_BlitSurface(barregauche,NULL,screen,&1);
SDL_BlitSurface(barredroite,NULL,screen,&1);
SDL_Flip(screen);
}
SDL_ShowCursor(1);
SDL_Quit();
return 0;
}
Si quelqu´un a deja eu cette erreur . ..
reponder moi.
Le but est d´afficher une image de fond, une barre a gauche, une barre a doite.
De faire bouger les deux barres.
En fait, le probleme, c´est de faire bouger 2 images.
Une ca va, mais 2, aucune idees.
mets ton code sur un wall plutot qu´ici http://walljv.free.fr comme ça tu en remplis pas la page, et en plus ton code est bien plus lisible.
Par contre si tu veux que quelqu´un regarde ton code pour t´aider, comente le un minimum pour qu´on est pas besoin de se casser la tête à savoir quoi fait quoi.
http://walljv.free.fr/index.php?to=view&id=83
Le probleme est que je n´arrive a faire bouger qu´une seule image, mais pas deux.
Si quelqu´un pourrait m´aider et me dire
comment faire bouger 2 images differentes, je n´en ai aucunes idees! ![]()
Apres, j´essairais d´avancer un max, car la je stagne, je fait du surplace . . .
Ben, c´est tout con. Tu as :
Rect1 = Rect(0,0,0,0);
Rect2 = Rect(150,0,0,0);//x diffère pour que les deux rectangles ne se confondent pas
if(key[SDLK_RIGHT])
{Rect1.x+=3;
Rect2.x+=6;//ceci est un exemple ^^
}
Et puis voilà.
http://hip-hopalex.skyblog.com
En fait je re ecrit on programme en utilisant plein de void, et je croit que j´ai compri.
http://walljv.free.fr/index.php?to=view&id=84
Voila, le probleme est plus de marcher, mon code est plus propre, je trouve, beaucoups de voids utilisés, mais cela ne marche pas encore.
Pour beaucoup d´images, il faudrait que j´essaye quad ce programe fonctionnera.
dyno -> Ton code compile ?
Je ne vois pas d´accolade finale au while de la ligne 55...
En plus, ton programme n´éxécute pas affiche(); et deplacement(); en même temps ! Donc quand tu es dans la fonction deplacement();, l´affichage n´est plus mis à jour ! Donc pas de boucle infinie dans la fontion deplacement() ! !!
Enfin, le :
72 while(1)
73 {
74 affiche();
75 deplacement();
76 }
77 SDL_ShowCursor(1);
78 SDL_Quit();
79 return 0;
est aberrant ! À quoi bon mettre un code après une boucle infinie ?
Sinon, ton SDL_ShowCursor est inutile car suivi d´un SDL_Quit. ( Dans la cas où ils ne seraient pas situés après une boucle infinie ; ))
Pour gérer les entrées clavier, fais un test simple, sans boucle dans ta fonction deplacement()...La boucle principale est en effet la boucle infinie de ton main ; )
J´ai deja reussi a faire des tests simples,mais je veux que mon programme soit plus lisible, moin cochon, donc j´utilise beaucoup de void.
Mon code ne compile pas.
J´ai viré le while de deplacement, et j´ai 3 fates au lieu de 6 fautes.
Mes fautes restantes sont :
47 :cannot convert `SDL_Rect´ to `SDL_Rect*´ for argument `4´ to `int SDL_UpperBlit(SDL_Surface*, SDL_Rect*, SDL_Surface*, SDL_Rect*)´
48 :cannot convert `SDL_Rect´ to `SDL_Rect*´ for argument `4´ to `int SDL_UpperBlit(SDL_Surface*, SDL_Rect*, SDL_Surface*, SDL_Rect*)´
49 :cannot convert `SDL_Rect´ to `SDL_Rect*´ for argument `4´ to `int SDL_UpperBlit(SDL_Surface*, SDL_Rect*, SDL_Surface*, SDL_Rect*)´
C´est sur les 3 blit surfaces.
Je recopie le main :
int main(int argc,char**argv)
{
init_SDL();
init_rect();
chargement();
while(1)
{
affiche();
deplacement();
}
SDL_Quit();
return 0;
}
Merci de m´avoir repondu precedemmant Ptival.