![]()
Pour gérer le clavier de manière efficace, tu crée un pointeur :
Uint8 *keys;
ensuite, dans la boucle de jeu :
keys = SDL_GetKeyState(NULL);
ca te génère un tableau de l´etat de chaque touche
par exemple
if ( keys[SDLK_UP]) si on a appuyé sur la touche du haut
Aussi simple que ca !
Tu le trouve comment mon editeur de map ?
Je compte creer une nouvelle version...
oki merci vengeur41, je v essayer ton truc si c´est ca c´est cool!
moi j´avais testé un truc assez cho
voila la source
--------------------------------------------------
-----------------------------------
SDL_Surface* screen;
SDL_Event event;
void init_SDL()
{
SDL_Init(SDL_INIT_VIDEO);
screen = SDL_SetVideoMode(640, 480, 32,SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_FULLSCREEN);
SDL_EnableUNICODE(1);
SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY,SDL_D
EFAULT_REPEAT_INTERVAL+50);
SDL_ShowCursor(0);
}
SDL_Rect Rect(int x,int y,int w,int h)
{
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 x=150;
int y=150;
SDL_Rect rect1;
init_SDL();
rect1.x = 0;
rect1.y = 0;
rect1.w = 640;
rect1.h = 480;
SDL_Surface* fullscreen;
SDL_Surface* droite[5];
fullscreen=LoadBMP("Data/Fonds/fond.bmp");
droite[0] = SDL_LoadBMP("Data/Hero/cronod1.bmp");
droite[1] = SDL_LoadBMP("Data/Hero/cronod2.bmp");
droite[2] = SDL_LoadBMP("Data/Hero/cronod3.bmp");
droite[3] = SDL_LoadBMP("Data/Hero/cronod4.bmp");
droite[4] = SDL_LoadBMP("Data/Hero/cronod5.bmp");
SDL_SetColorKey(droite[0],SDL_SRCCOLORKEY , SDL_MapRGBA(droite[0]->format,255,0,255,0));
SDL_SetColorKey(droite[1],SDL_SRCCOLORKEY , SDL_MapRGBA(droite[1]->format,255,0,255,0));
SDL_SetColorKey(droite[2],SDL_SRCCOLORKEY , SDL_MapRGBA(droite[2]->format,255,0,255,0));
SDL_SetColorKey(droite[3],SDL_SRCCOLORKEY , SDL_MapRGBA(droite[3]->format,255,0,255,0));
SDL_SetColorKey(droite[4],SDL_SRCCOLORKEY , SDL_MapRGBA(droite[4]->format,255,0,255,0));
SDL_Surface* gauche[5];
gauche[0] = SDL_LoadBMP("Data/Hero/cronog1.bmp");
gauche[1] = SDL_LoadBMP("Data/Hero/cronog2.bmp");
gauche[2] = SDL_LoadBMP("Data/Hero/cronog3.bmp");
gauche[3] = SDL_LoadBMP("Data/Hero/cronog4.bmp");
gauche[4] = SDL_LoadBMP("Data/Hero/cronog5.bmp");
SDL_SetColorKey(gauche[0],SDL_SRCCOLORKEY , SDL_MapRGBA(gauche[0]->format,255,0,255,0));
SDL_SetColorKey(gauche[1],SDL_SRCCOLORKEY , SDL_MapRGBA(gauche[1]->format,255,0,255,0));
SDL_SetColorKey(gauche[2],SDL_SRCCOLORKEY , SDL_MapRGBA(gauche[2]->format,255,0,255,0));
SDL_SetColorKey(gauche[3],SDL_SRCCOLORKEY , SDL_MapRGBA(gauche[3]->format,255,0,255,0));
SDL_SetColorKey(gauche[4],SDL_SRCCOLORKEY , SDL_MapRGBA(gauche[4]->format,255,0,255,0));
SDL_Surface* bas[5];
bas[0] = SDL_LoadBMP("Data/Hero/cronob1.bmp");
bas[1] = SDL_LoadBMP("Data/Hero/cronob2.bmp");
bas[2] = SDL_LoadBMP("Data/Hero/cronob3.bmp");
bas[3] = SDL_LoadBMP("Data/Hero/cronob4.bmp");
bas[4] = SDL_LoadBMP("Data/Hero/cronob5.bmp");
SDL_SetColorKey(bas[0],SDL_SRCCOLORKEY , SDL_MapRGBA(bas[0]->format,255,0,255,0));
SDL_SetColorKey(bas[1],SDL_SRCCOLORKEY , SDL_MapRGBA(bas[1]->format,255,0,255,0));
SDL_SetColorKey(bas[2],SDL_SRCCOLORKEY , SDL_MapRGBA(bas[2]->format,255,0,255,0));
SDL_SetColorKey(bas[3],SDL_SRCCOLORKEY , SDL_MapRGBA(bas[3]->format,255,0,255,0));
SDL_SetColorKey(bas[4],SDL_SRCCOLORKEY , SDL_MapRGBA(bas[4]->format,255,0,255,0));
SDL_Surface* haut[5];
haut[0] = SDL_LoadBMP("Data/Hero/cronoh1.bmp");
haut[1] = SDL_LoadBMP("Data/Hero/cronoh2.bmp");
haut[2] = SDL_LoadBMP("Data/Hero/cronoh3.bmp");
haut[3] = SDL_LoadBMP("Data/Hero/cronoh4.bmp");
haut[4] = SDL_LoadBMP("Data/Hero/cronoh5.bmp");
SDL_SetColorKey(haut[0],SDL_SRCCOLORKEY , SDL_MapRGBA(haut[0]->format,255,0,255,0));
SDL_SetColorKey(haut[1],SDL_SRCCOLORKEY , SDL_MapRGBA(haut[1]->format,255,0,255,0));
SDL_SetColorKey(haut[2],SDL_SRCCOLORKEY , SDL_MapRGBA(haut[2]->format,255,0,255,0));
SDL_SetColorKey(haut[3],SDL_SRCCOLORKEY , SDL_MapRGBA(haut[3]->format,255,0,255,0));
SDL_SetColorKey(haut[4],SDL_SRCCOLORKEY , SDL_MapRGBA(haut[4]->format,255,0,255,0));
SDL_Surface* fixe[4];
fixe[0] = SDL_LoadBMP("Data/Hero/cronof1.bmp");
fixe[1] = SDL_LoadBMP("Data/Hero/cronof2.bmp");
fixe[2] = SDL_LoadBMP("Data/Hero/cronof3.bmp");
fixe[3] = SDL_LoadBMP("Data/Hero/cronof4.bmp");
SDL_SetColorKey(fixe[0],SDL_SRCCOLORKEY , SDL_MapRGBA(fixe[0]->format,255,0,255,0));
SDL_SetColorKey(fixe[1],SDL_SRCCOLORKEY , SDL_MapRGBA(fixe[1]->format,255,0,255,0));
SDL_SetColorKey(fixe[2],SDL_SRCCOLORKEY , SDL_MapRGBA(fixe[2]->format,255,0,255,0));
SDL_SetColorKey(fixe[3],SDL_SRCCOLORKEY , SDL_MapRGBA(fixe[3]->format,255,0,255,0));
SDL_BlitSurface(fullscreen,NULL,screen,NULL);
while(SDL_PollEvent(&);)
{
switch(event.type)
{
case SDL_KEYDOWN:
switch(event.key.keysym.sym)
{
case SDLK_ESCAPE:
break;
case SDLK_RETURN:
break;
case SDLK_i: y-=3*s;
rect1.y=y;
SDL_BlitSurface(haut[(y/20)%5], NULL,screen,&1);
SDL_Flip(screen);
break;
case SDLK_k: y+=3*s;
rect1.y=y;
SDL_BlitSurface(bas[(y/20)%5], NULL,screen,&1);
SDL_Flip(screen);
break;
case SDLK_j: x-=3*s;
rect1.x=x;
SDL_BlitSurface(gauche[(x/20)%5], NULL,screen,&1);
SDL_Flip(screen);
break;
case SDLK_l: x+=3*s;
rect1.x=x;
SDL_BlitSurface(droite[(x/20)%5], NULL,screen,&1);
SDL_Flip(screen);
break;
default:break;
}
break;
case SDL_KEYUP: SDL_BlitSurface(fixe[0], NULL,screen,&1);
SDL_Flip(screen);
break;
default: break;
}
}
SDL_ShowCursor(1);
SDL_Quit();
return 0;
}
--------------------------------------------------
-----------------------------------
Le programme se lance, mais il se referme aussi tôt, mais je v essayer ta technique, sa ma l´air beaucoup plus raisonnable!
Attention !
Garde quand meme la event loop !
la event loop, c´est la boucle ou je demande mes keys? si je ne m´abuse
while(SDL_PollEvent(&);)
{
switch(event.type)
{
case SDL_QUIT:
. ..
break;
}
}
ca ca suffit comme eventloop
oki je v tester ca
merci
Et je propose de changer un peu ton programme parce que là ca va pas du tout :
ton while de eventloop tu le transforme en if que tu met dans une boucle while qui ne s´arrete que quand on quitte...
Ba pkoi pas le changer, dailleurs, j´ai pas mal de truc a réorganiser dedans, mais en attendant voici ma nouvelle source:
-------------------------------------------------
Uint8 *keys;
SDL_Surface* screen;
SDL_Event event;
void init_SDL()
{
SDL_Init(SDL_INIT_VIDEO);
screen = SDL_SetVideoMode(640, 480, 32,SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_FULLSCREEN);
SDL_EnableUNICODE(1);
SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY,SDL_D
EFAULT_REPEAT_INTERVAL+50);
SDL_ShowCursor(0);
}
SDL_Rect Rect(int x,int y,int w,int h)
{
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 x=150;
int y=150;
SDL_Rect rect1;
init_SDL();
rect1.x = 0;
rect1.y = 0;
rect1.w = 640;
rect1.h = 480;
SDL_Surface* fullscreen;
SDL_Surface* droite[5];
fullscreen=LoadBMP("Data/Fonds/fond.bmp");
droite[0] = SDL_LoadBMP("Data/Hero/cronod1.bmp");
droite[1] = SDL_LoadBMP("Data/Hero/cronod2.bmp");
droite[2] = SDL_LoadBMP("Data/Hero/cronod3.bmp");
droite[3] = SDL_LoadBMP("Data/Hero/cronod4.bmp");
droite[4] = SDL_LoadBMP("Data/Hero/cronod5.bmp");
SDL_SetColorKey(droite[0],SDL_SRCCOLORKEY , SDL_MapRGBA(droite[0]->format,255,0,255,0));
SDL_SetColorKey(droite[1],SDL_SRCCOLORKEY , SDL_MapRGBA(droite[1]->format,255,0,255,0));
SDL_SetColorKey(droite[2],SDL_SRCCOLORKEY , SDL_MapRGBA(droite[2]->format,255,0,255,0));
SDL_SetColorKey(droite[3],SDL_SRCCOLORKEY , SDL_MapRGBA(droite[3]->format,255,0,255,0));
SDL_SetColorKey(droite[4],SDL_SRCCOLORKEY , SDL_MapRGBA(droite[4]->format,255,0,255,0));
SDL_Surface* gauche[5];
gauche[0] = SDL_LoadBMP("Data/Hero/cronog1.bmp");
gauche[1] = SDL_LoadBMP("Data/Hero/cronog2.bmp");
gauche[2] = SDL_LoadBMP("Data/Hero/cronog3.bmp");
gauche[3] = SDL_LoadBMP("Data/Hero/cronog4.bmp");
gauche[4] = SDL_LoadBMP("Data/Hero/cronog5.bmp");
SDL_SetColorKey(gauche[0],SDL_SRCCOLORKEY , SDL_MapRGBA(gauche[0]->format,255,0,255,0));
SDL_SetColorKey(gauche[1],SDL_SRCCOLORKEY , SDL_MapRGBA(gauche[1]->format,255,0,255,0));
SDL_SetColorKey(gauche[2],SDL_SRCCOLORKEY , SDL_MapRGBA(gauche[2]->format,255,0,255,0));
SDL_SetColorKey(gauche[3],SDL_SRCCOLORKEY , SDL_MapRGBA(gauche[3]->format,255,0,255,0));
SDL_SetColorKey(gauche[4],SDL_SRCCOLORKEY , SDL_MapRGBA(gauche[4]->format,255,0,255,0));
SDL_Surface* bas[5];
bas[0] = SDL_LoadBMP("Data/Hero/cronob1.bmp");
bas[1] = SDL_LoadBMP("Data/Hero/cronob2.bmp");
bas[2] = SDL_LoadBMP("Data/Hero/cronob3.bmp");
bas[3] = SDL_LoadBMP("Data/Hero/cronob4.bmp");
bas[4] = SDL_LoadBMP("Data/Hero/cronob5.bmp");
SDL_SetColorKey(bas[0],SDL_SRCCOLORKEY , SDL_MapRGBA(bas[0]->format,255,0,255,0));
SDL_SetColorKey(bas[1],SDL_SRCCOLORKEY , SDL_MapRGBA(bas[1]->format,255,0,255,0));
SDL_SetColorKey(bas[2],SDL_SRCCOLORKEY , SDL_MapRGBA(bas[2]->format,255,0,255,0));
SDL_SetColorKey(bas[3],SDL_SRCCOLORKEY , SDL_MapRGBA(bas[3]->format,255,0,255,0));
SDL_SetColorKey(bas[4],SDL_SRCCOLORKEY , SDL_MapRGBA(bas[4]->format,255,0,255,0));
SDL_Surface* haut[5];
haut[0] = SDL_LoadBMP("Data/Hero/cronoh1.bmp");
haut[1] = SDL_LoadBMP("Data/Hero/cronoh2.bmp");
haut[2] = SDL_LoadBMP("Data/Hero/cronoh3.bmp");
haut[3] = SDL_LoadBMP("Data/Hero/cronoh4.bmp");
haut[4] = SDL_LoadBMP("Data/Hero/cronoh5.bmp");
SDL_SetColorKey(haut[0],SDL_SRCCOLORKEY , SDL_MapRGBA(haut[0]->format,255,0,255,0));
SDL_SetColorKey(haut[1],SDL_SRCCOLORKEY , SDL_MapRGBA(haut[1]->format,255,0,255,0));
SDL_SetColorKey(haut[2],SDL_SRCCOLORKEY , SDL_MapRGBA(haut[2]->format,255,0,255,0));
SDL_SetColorKey(haut[3],SDL_SRCCOLORKEY , SDL_MapRGBA(haut[3]->format,255,0,255,0));
SDL_SetColorKey(haut[4],SDL_SRCCOLORKEY , SDL_MapRGBA(haut[4]->format,255,0,255,0));
SDL_Surface* fixe[4];
fixe[0] = SDL_LoadBMP("Data/Hero/cronof1.bmp");
fixe[1] = SDL_LoadBMP("Data/Hero/cronof2.bmp");
fixe[2] = SDL_LoadBMP("Data/Hero/cronof3.bmp");
fixe[3] = SDL_LoadBMP("Data/Hero/cronof4.bmp");
SDL_SetColorKey(fixe[0],SDL_SRCCOLORKEY , SDL_MapRGBA(fixe[0]->format,255,0,255,0));
SDL_SetColorKey(fixe[1],SDL_SRCCOLORKEY , SDL_MapRGBA(fixe[1]->format,255,0,255,0));
SDL_SetColorKey(fixe[2],SDL_SRCCOLORKEY , SDL_MapRGBA(fixe[2]->format,255,0,255,0));
SDL_SetColorKey(fixe[3],SDL_SRCCOLORKEY , SDL_MapRGBA(fixe[3]->format,255,0,255,0));
SDL_BlitSurface(fullscreen,NULL,screen,NULL);
while(SDL_PollEvent(&))
{
switch(event.type)
{
case SDL_QUIT:
keys = SDL_GetKeyState(NULL);
if ( keys[SDLK_UP])
{
y-=3*s;
rect1.y=y;
SDL_BlitSurface(haut[(y/20)%5], NULL,screen,&1);
SDL_Flip(screen);
}
if ( keys[SDLK_DOWN])
{
y+=3*s;
rect1.y=y;
SDL_BlitSurface(bas[(y/20)%5], NULL,screen,&1);
SDL_Flip(screen);
}
if ( keys[SDLK_LEFT])
{
x-=3*s;
rect1.x=x;
SDL_BlitSurface(gauche[(x/20)%5], NULL,screen,&1);
SDL_Flip(screen);
}
if ( keys[SDLK_RIGHT])
{
x+=3*s;
rect1.x=x;
SDL_BlitSurface(haut[(x/20)%5], NULL,screen,&1);
SDL_Flip(screen);
}
break;
}
}
SDL_ShowCursor(1);
SDL_Quit();
return 0;
}
-------------------------------------------------
Ca produit le même résultat que l´autre, ca se lance puis ssa se referme juste derriere
http://musashiarea.free.fr/screen/source.txt
on voit mieux ma source
utilise un wall, il gère les indentations
http://walljv.free.fr
bi voila
http://walljv.free.fr/index.php?to=view&id=69
j´ai pas teste ton code , mais generalement , quand le programme s´ouvre et se referme , c´est la faute a un seg fault
regarde bien si toutes tes images sont chargees , des trucs comme ca
ma derniere seg fault , je chargeais une image apres l´avoir utilisee . .. c peut etre la meme chose chez toi
par contre , ton code est bien trop compliquée
si j´ai bien compris , ca charge un perso , avec les vues droite gauche haut bas c bien ca ?
dans ce cas , tu devrais tout mettre dans UN SEUL bitmap , ca te ferait beaucoup moins de SDL_SetColorKey etc . ..
ah et autre chose
ta boucle while est bizarre
tu devrais switcher entre les differents cas , si tu veux , mais pas flip(screen) pour chaque cas
tu referme ton switch , et juste a la fin de ta boucle while , tu ecris flip(screen) ok ?
oki pour le filp, mais pour faire une seule bitmap, et que mon prog récupère plusieurs images dessus je vois pas comment faire
en fait , tu dessines toutes les positions de ton perso sur un seul sprite , mais " regulierement" je veux dire que si ton perso fait 50*50 pixels , tu les dessines vraiment tous les 50 pixels , de cette facon , tu obtiens un tileset
et il te suffit de faire une structure
SDL_Rect image;
image.x = coordonees de l´absicce du point haut gauche de l´image que tu souhaites afficher
image.y = coordonne de l´ordonee du haut de l´image que tu veux afficher
image.w = la largeur ( enl´occurence 50 pixels )
image.h = la hauteur ( 50 pixels aussi ? )
de cette facon , tu remarqueras qu´il te suffit de multiplier x par w pour passer a l´image suivante , et avoir ainsi une animation ![]()
Nan, c´est n´importe quoi ce code, ca se fait pas comme ca...
Voici le bon :
Uint8 *keys;
SDL_Surface* screen;
SDL_Event event;
void init_SDL()
{
SDL_Init(SDL_INIT_VIDEO);
screen = SDL_SetVideoMode(640, 480, 32,SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_FULLSCREEN);
SDL_EnableUNICODE(1);
SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY,SDL_D
EFAULT_REPEAT_INTERVAL+50);
SDL_ShowCursor(0);
}
SDL_Rect Rect(int x,int y,int w,int h)
{
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 x=150;
int y=150;
SDL_Rect rect1;
init_SDL();
rect1.x = 0;
rect1.y = 0;
rect1.w = 640;
rect1.h = 480;
SDL_Surface* fullscreen;
SDL_Surface* droite[5];
fullscreen=LoadBMP("Data/Fonds/fond.bmp");
droite[0] = SDL_LoadBMP("Data/Hero/cronod1.bmp");
droite[1] = SDL_LoadBMP("Data/Hero/cronod2.bmp");
droite[2] = SDL_LoadBMP("Data/Hero/cronod3.bmp");
droite[3] = SDL_LoadBMP("Data/Hero/cronod4.bmp");
droite[4] = SDL_LoadBMP("Data/Hero/cronod5.bmp");
SDL_SetColorKey(droite[0],SDL_SRCCOLORKEY , SDL_MapRGBA(droite[0]->format,255,0,255,0));
SDL_SetColorKey(droite[1],SDL_SRCCOLORKEY , SDL_MapRGBA(droite[1]->format,255,0,255,0));
SDL_SetColorKey(droite[2],SDL_SRCCOLORKEY , SDL_MapRGBA(droite[2]->format,255,0,255,0));
SDL_SetColorKey(droite[3],SDL_SRCCOLORKEY , SDL_MapRGBA(droite[3]->format,255,0,255,0));
SDL_SetColorKey(droite[4],SDL_SRCCOLORKEY , SDL_MapRGBA(droite[4]->format,255,0,255,0));
SDL_Surface* gauche[5];
gauche[0] = SDL_LoadBMP("Data/Hero/cronog1.bmp");
gauche[1] = SDL_LoadBMP("Data/Hero/cronog2.bmp");
gauche[2] = SDL_LoadBMP("Data/Hero/cronog3.bmp");
gauche[3] = SDL_LoadBMP("Data/Hero/cronog4.bmp");
gauche[4] = SDL_LoadBMP("Data/Hero/cronog5.bmp");
SDL_SetColorKey(gauche[0],SDL_SRCCOLORKEY , SDL_MapRGBA(gauche[0]->format,255,0,255,0));
SDL_SetColorKey(gauche[1],SDL_SRCCOLORKEY , SDL_MapRGBA(gauche[1]->format,255,0,255,0));
SDL_SetColorKey(gauche[2],SDL_SRCCOLORKEY , SDL_MapRGBA(gauche[2]->format,255,0,255,0));
SDL_SetColorKey(gauche[3],SDL_SRCCOLORKEY , SDL_MapRGBA(gauche[3]->format,255,0,255,0));
SDL_SetColorKey(gauche[4],SDL_SRCCOLORKEY , SDL_MapRGBA(gauche[4]->format,255,0,255,0));
SDL_Surface* bas[5];
bas[0] = SDL_LoadBMP("Data/Hero/cronob1.bmp");
bas[1] = SDL_LoadBMP("Data/Hero/cronob2.bmp");
bas[2] = SDL_LoadBMP("Data/Hero/cronob3.bmp");
bas[3] = SDL_LoadBMP("Data/Hero/cronob4.bmp");
bas[4] = SDL_LoadBMP("Data/Hero/cronob5.bmp");
SDL_SetColorKey(bas[0],SDL_SRCCOLORKEY , SDL_MapRGBA(bas[0]->format,255,0,255,0));
SDL_SetColorKey(bas[1],SDL_SRCCOLORKEY , SDL_MapRGBA(bas[1]->format,255,0,255,0));
SDL_SetColorKey(bas[2],SDL_SRCCOLORKEY , SDL_MapRGBA(bas[2]->format,255,0,255,0));
SDL_SetColorKey(bas[3],SDL_SRCCOLORKEY , SDL_MapRGBA(bas[3]->format,255,0,255,0));
SDL_SetColorKey(bas[4],SDL_SRCCOLORKEY , SDL_MapRGBA(bas[4]->format,255,0,255,0));
SDL_Surface* haut[5];
haut[0] = SDL_LoadBMP("Data/Hero/cronoh1.bmp");
haut[1] = SDL_LoadBMP("Data/Hero/cronoh2.bmp");
haut[2] = SDL_LoadBMP("Data/Hero/cronoh3.bmp");
haut[3] = SDL_LoadBMP("Data/Hero/cronoh4.bmp");
haut[4] = SDL_LoadBMP("Data/Hero/cronoh5.bmp");
SDL_SetColorKey(haut[0],SDL_SRCCOLORKEY , SDL_MapRGBA(haut[0]->format,255,0,255,0));
SDL_SetColorKey(haut[1],SDL_SRCCOLORKEY , SDL_MapRGBA(haut[1]->format,255,0,255,0));
SDL_SetColorKey(haut[2],SDL_SRCCOLORKEY , SDL_MapRGBA(haut[2]->format,255,0,255,0));
SDL_SetColorKey(haut[3],SDL_SRCCOLORKEY , SDL_MapRGBA(haut[3]->format,255,0,255,0));
SDL_SetColorKey(haut[4],SDL_SRCCOLORKEY , SDL_MapRGBA(haut[4]->format,255,0,255,0));
SDL_Surface* fixe[4];
fixe[0] = SDL_LoadBMP("Data/Hero/cronof1.bmp");
fixe[1] = SDL_LoadBMP("Data/Hero/cronof2.bmp");
fixe[2] = SDL_LoadBMP("Data/Hero/cronof3.bmp");
fixe[3] = SDL_LoadBMP("Data/Hero/cronof4.bmp");
SDL_SetColorKey(fixe[0],SDL_SRCCOLORKEY , SDL_MapRGBA(fixe[0]->format,255,0,255,0));
SDL_SetColorKey(fixe[1],SDL_SRCCOLORKEY , SDL_MapRGBA(fixe[1]->format,255,0,255,0));
SDL_SetColorKey(fixe[2],SDL_SRCCOLORKEY , SDL_MapRGBA(fixe[2]->format,255,0,255,0));
SDL_SetColorKey(fixe[3],SDL_SRCCOLORKEY , SDL_MapRGBA(fixe[3]->format,255,0,255,0));
SDL_BlitSurface(fullscreen,NULL,screen,NULL);
while ( !bQuit)
{
if(SDL_PollEvent(&))
{
switch(event.type)
{
case SDL_QUIT:
break;
}
}
keys = SDL_GetKeyState(NULL);
if ( keys[SDLK_UP])
{
y-=3*s;
rect1.y=y;
SDL_BlitSurface(haut[(y/20)%5], NULL,screen,&1);
SDL_Flip(screen);
}
if ( keys[SDLK_DOWN])
{
y+=3*s;
rect1.y=y;
SDL_BlitSurface(bas[(y/20)%5], NULL,screen,&1);
SDL_Flip(screen);
}
if ( keys[SDLK_LEFT])
{
x-=3*s;
rect1.x=x;
SDL_BlitSurface(gauche[(x/20)%5], NULL,screen,&1);
SDL_Flip(screen);
}
if ( keys[SDLK_RIGHT])
{
x+=3*s;
rect1.x=x;
SDL_BlitSurface(haut[(x/20)%5], NULL,screen,&1);
SDL_Flip(screen);
}
SDL_ShowCursor(1);
}
SDL_Quit();
return 0;
}
Ca marche ptet pas mais ton code est vraiment pourri. Tout est à refaire?. Pk tu me teste les touches au moment du quit ?
Ptit post juste pour vous avertir que j´ai fait une nouvelle version de mon renderer + editeur de map.
1- la map qui était jusque là un tableau à double dimention a été réduit à une dimention. On peut choisir la taille de la map en lancant l´exe de cette manière :
MapEdit largeur hauteur
Le programme se charge du reste. Mais pour revenir au tableau, pk supprimer une dimention ? Ben en gros je savais pas comment adapter proprement la table du tableau en fonction de la demande de l´utilisateur. Donc j´ai préféré faire une dimention pour allouer la mémoire ainsi :
tableau = ( unsigned int *)calloc(maph*mapw,sizeof(unsigned int));
2- Le renderer a suivi ; )
J´oubliais : si vous le voulez avec le code source, maillez moi, j´arrive plus à uploader -__-´ ( lycos + FileZilla).
Bon j´ai changé le flip, ainsi que la boucle
Maintenant mon perso bouge quand je veux
seul problème: lorsqu´il s´arette il disparait
c´est normal car je n´ai pas dit se qu´il se passait a ce moment la
Alors comment définir le moment ou mon pêrso s´arrete?
Je veux que lorsque qu´il soit arreter, selon son ancien déplacement, on voit une image qui lui corresponde.
Sinon, jeje, j´ai fait une seule bitmap ( selon les critères) sa taille est de 46x75 et j´ai essayé de l´utiliser, j´ai réussi mais je ne crois pas qu´utiliser une seule bitmap simplifiera mon code car lorsque ( par exemple) mon perso va a gauche, il y a 5 bmp qui se suivent et j´affiche tout sa grace à une seulement 2 lignes
rect1.x=x;
SDL_BlitSurface(gauche[(x/20)%5],NULL,screen,&
1);
alors qu´avec ta technique il en faudrait beaucoup plus ( même si je ne déclare qu´une seule ligne au départ)
x=2*w;
position.x=x; position.w=w; SDL_BlitSurface(crono,&,screen,&1);
x=2*h;
position.x=x; position.h=h; SDL_BlitSurface(crono,&,screen,&1);
x=3*h;
position.x=x; position.h=h; SDL_BlitSurface(crono,&,screen,&1);
x=4*h;
position.x=x; position.h=h; SDL_BlitSurface(crono,&,screen,&1);
x=5*h;
position.x=x; position.h=h; SDL_BlitSurface(crono,&,screen,&1);
c´est quand même plus long non?
Et si je veux quand même utiliser cette méthode, il faudrait que je sache comment on passe du temps, car sinon l´animation de mon perso sera bien trop rapide