J´ai pas bien compris la question...
Tu veux faire un colorkey non ?
Cad que la couleur verte ( par exemple) tu la rend transparente ?
Dans ce cas c´est SDL_SetColorkey...
Regarde dans la doc de SDL comment on utilise cette fonction, tu devrais y arriver.
En tout cas ton exemple est sensé marcher si tu remplace
SDL_SetAlpha(image,SDL_SRCALPHA,128);
par
SDL_SetAlpha(firstscreen,SDL_SRCALPHA,128);
( si tu le met juste avant blitter) ceci dit j´ai pas essayé...
. ..
Vengeur41 Cela fonctionne, j´ai mit :
SDL_SetColorKey(firstscreen,SDL_SRCCOLORKEY , SDL_MapRGBA(firstscreen->format,255,0,255,0));
Mon probleme etait en fait le image mit au mieu de firstscreen.
Mon prochain exploit sera la gestion du clavier ( dure dure)
En ce qui concerne le calvier, gère le en parallèle des events.
Cad que t´appelle une boucle d´event ( une fonction) et une boucle de clavier ( une autre fonction) appelée en boucle.
pour gérer efficacement le clavier :
Uint8 *keystate;
keystate=SDL_GetKeyState(NULL);
if ( keystate[touche])
. ..
les touches c´est par exemple SDLK_SPACE pour espace... Dans notre cas =>
if ( keystate[SDLK_SPACE])
J´ai beaucoup de queston ( dsl, je ne suis pas doué)
1:Ou je pourrais mettre ton code :
_avant int?
_Ou je veux dans le int
2:Sinon, comment faire pour baisser une image quand on a fait une fois la touche espace: peu etre :
Uint8 *keystate;
keystate=SDL_GetKeyState(NULL);
if ( keystate[SDLK_SPACE])
Down("image.bmp")1;
Un truc dans le genre, je n´en ai aucune idee . ..
Tu sais la c´est bien dur ton programme ( enfin pas vraiment).
Tout d´abord faut mettre ca bien au point : une fois qu´elle est chargée en tant que surface ( ici elle s´appelle firstscreen) on s´en fout de image.bmp. Tu vois, les rect contrôlent tout ce qu´est coordonnées. Bon le mieux pour t´expliquer ce sera toujours un programme complet :
SDL_Surface *screen, *image;
SDL_Event e;
SDL_Rect rcdst;
Uint8 *keystate;
int x,y, bQuit=0;
int main(int argc, char **argv)
{
SDL_Init(SDL_INIT_VIDEO);
screen =
SDL_SetVideoMode(1024,768,16,SDL_HWSURFACE|SDL_FUL
LSCREEN);
SDL_WM_SetCaption("Ma fenetre",NULL);
image=SDL_LoadBMP("image.bmp");
x=500;
y=380;
/ /Met ton SDL_SetColorkey ici si tu veux
while(!bQuit)
{
SDL_FillRect(screen,NULL,0);
rcdst.x=x;
rcdst.y=y;
SDL_BlitSurface(image,NULL,screen,&);
SDL_Flip(screen);
if ( SDL_PollEvent(&) && e.type==SDL_QUIT)
bQuit=1;
keystate=SDL_GetKeyState(NULL);
if ( keystate[SDLK_ESCAPE])bQuit=1;
if ( keystate[SDLK_DOWN])y++;
if ( keystate[SDLK_UP])y--;
if ( keystate[SDLK_RIGHT])x++;
if ( keystate[SDLK_LEFT])x--;
}
SDL_FreeSurface(screen);
SDL_Quit();
return 0;
}
Bon là ton image.bmp fait une petite style euh 60x60. Si ton ordinateur est speed ( meme s´il ne l´est pas) fais quand meme une synchronisation du fps => cad ralentir le jeu si le pc est rapide...
Tu la dirige avec les touches directionnelles.
Ca doit compiler si j´ai pas fait d´erreur. Mais nromalement c´est ok. C´est ptet SDL/SDL.h au lieu de SDL.h enfin t´adapte après...
Euh si tu veux un exemple de jeu complet avec son code source programmé en C avec SDL et compilé sous Dev-C++, télécharge mon jeu :
http://membres.lycos.fr/lezardware/lezardware_windows.zip
si le lien est pas ok, vas sur
http://membres.lycos.fr/lezardware/
Le code source est assez instructif je pense mais attend peut-etred´avoir un niveau plus haut pour tout comprendre. En plus le code est pas hyper propre ni hyper commenté. Je veux pas que tu sois dégouté de la SDL par mon code
J´ai changé quelques petit trucs mais l´ecran reste noir, pourquoi, je ne sais pas.
Je verrais demain car mon frere veut faire l´ordi, y me gonffle
A plus !
Plutot baleze a comprendre le code pour moi, j´ai un petit peu beaucoup de mal.
Pour le deplacement, je vais essayer de comprendre, essayer plusieurs methodes, et si je susi totalement paumé, je demanderais, en tout cas
Sinon, vengeur, j´ai essayé tout les minis jeux, ils sont cool, et le jeu de peche il est super chaud, je n´arrive pas a gagner!
L´ecran etait noir car je n´avait pas changé le nom de l´image.
Mais par contre, l´image clignote.
Peut etre par ce que j´ai cru comprende que c´est en 60*60 ou un truc dans le genre.
Je vais l´inclure dans mon truc.
Prochaine difficulté : la collision.
En fait ca marche, j´avais oublier de changer le nom de l´image
Je vais tout mettre a jour.
Sinon, l´image clignote beaucoup en haut, et moin en bas
Clignotement -> Tu n´es pas en double buffering
Rajoute le flag SDL_DOUBLEBUF dans SDL_Init
D´ailleurs on appelle ça du scintillement.
Et j´me suis gouré j´voulais dire dans SDL_SetVideoMode() que tu rajoutes le flag
Pour savoir ce qu´est le double buffering cherche sur le site de JYY
Okmeri ptival ca marche, mais par contre , pour transposer, j´ai 4 ereurs, au niveaudes 3commandes haut bas quitte, et de la lignes du dessus :
SDL_Surface *screen;
SDL_Surface *firstscreen;
SDL_Surface *image;
SDL_Event event;
SDL_Rect rcdst;
Uint8 keystate;
void init_SDL()
{
SDL_Init(SDL_INIT_VIDEO);
screen = SDL_SetVideoMode(1024, 768, 32,SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_FULLSCREEN);
SDL_ShowCursor(0);
}
void waitkey()
{
while(1)
{
while(SDL_PollEvent(&))
{
if ( event.type == SDL_KEYDOWN)
{
if ( event.key.keysym.sym == SDLK_RETURN) return;
}
}
}
}
int x,y, bQuit=0;
int main(int argc , char **argv)
{
SDL_Rect rect1;
init_SDL();
firstscreen = SDL_LoadBMP("aire.bmp");
rect1.x = 0;
rect1.y = 0;
rect1.w = 1024;
rect1.h = 768;
SDL_BlitSurface(firstscreen,NULL,screen,&1);
firstscreen = SDL_LoadBMP("barre.bmp");
rect1.x = 20;
rect1.y = 333;
rect1.w = 1024;
rect1.h = 768;
SDL_SetColorKey(firstscreen,SDL_SRCCOLORKEY , SDL_MapRGBA(firstscreen->format,255,0,255,0));
while(!bQuit)
{
SDL_FillRect(screen,NULL,0);
rcdst.x=x;
rcdst.y=y;
SDL_BlitSurface(firstscreen,NULL,screen,&1);
bQuit=1;
keystate=SDL_GetKeyState(NULL);
if(keystate[SDLK_ESCAPE])bQuit=1;
if(keystate[SDLK_DOWN])y++;
if(keystate[SDLK_UP])y--;
}
firstscreen = SDL_LoadBMP("barre joueur 3.bmp");
rect1.x=986;
rect1.y=333;
rect1.w=1024;
rect1.h=768;
SDL_SetColorKey(firstscreen,SDL_SRCCOLORKEY , SDL_MapRGBA(firstscreen->format,255,0,255,0));
SDL_BlitSurface(firstscreen,NULL,screen,&1);
SDL_Flip(screen);
waitkey();
SDL_ShowCursor(1);
SDL_Quit();
return 0;
}
J´ai reussi a corriger tout les bugs, mais neamoin, l´ecran est noir, j´appui sur echap, l´image 3 apparait, j´appui sur echap, plus rien, j´appui sur entre, ca se ferme.
Le programme est la :
SDL_Surface *screen;
SDL_Surface *firstscreen;
SDL_Surface *image;
SDL_Event event;
SDL_Rect rcdst;
Uint8* keystate;
int x,y, bQuit=0;
void init_SDL()
{
SDL_Init(SDL_INIT_VIDEO);
screen = SDL_SetVideoMode(1024, 768, 32,SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_FULLSCREEN);
SDL_WM_SetCaption("Ma fenetre",NULL);
SDL_ShowCursor(0);
}
void waitkey()
{
while(1)
{
while(SDL_PollEvent(&))
{
if ( event.type == SDL_KEYDOWN)
{
if ( event.key.keysym.sym == SDLK_RETURN) return;
}
}
}
}
int main(int argc , char **argv)
{
SDL_Rect rect1;
init_SDL();
firstscreen = SDL_LoadBMP("image1.bmp");
rect1.x = 0;
rect1.y = 0;
rect1.w = 1024;
rect1.h = 768;
SDL_BlitSurface(firstscreen,NULL,screen,&1);
firstscreen=SDL_LoadBMP("image2.bmp");
x=500;
y=380;
SDL_SetColorKey(firstscreen,SDL_SRCCOLORKEY , SDL_MapRGBA(firstscreen->format,255,0,255,0));
while(!bQuit)
{
SDL_FillRect(screen,NULL,0);
rcdst.x=x;
rcdst.y=y;
SDL_BlitSurface(image,NULL,screen,&);
SDL_Flip(screen);
if(SDL_PollEvent(&) && event.type==SDL_QUIT)
bQuit=1;
keystate=SDL_GetKeyState(NULL);
if(keystate[SDLK_ESCAPE])bQuit=1;
if(keystate[SDLK_DOWN])y++;
if(keystate[SDLK_UP])y--;
}
SDL_FreeSurface(screen);
firstscreen = SDL_LoadBMP("image3"); rect1.x=986;
rect1.y=333;
rect1.w=1024;
rect1.h=768;
SDL_SetColorKey(firstscreen,SDL_SRCCOLORKEY , SDL_MapRGBA(firstscreen->format,255,0,255,0));
SDL_BlitSurface(firstscreen,NULL,screen,&1);
SDL_Flip(screen);
waitkey();
SDL_ShowCursor(1);
SDL_Quit();
return 0;
}
Pourquoi, je ne sais pas, peut etre parce que il y a deux moyens de sortis . .. I dont known ?
I am a upper
_______§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ §§§
_______§§_____________________________ ___§§
_______§§_____________________________ ___§§
_______§§_____________________________ ___§§
_______§§_____________________________ ___§§
_______§§____________HELP ME___________ ___§§
_______§§_____________________________ ___§§
_______§§_____________________________ ___§§
_______§§_____________________________ ___§§
_______§§_____________________________ ___§§
_______§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ §§§§§
________________________§§
________________________§§
_______§§§§§§§§_________§§
_____§§§______§§§_______§§
___§§§__________§§§_____§§
_§§§__§§______§§__§§§___§§
§§__________________§§_§§§§
§§__________________§§§____§
§§__________________§§§____§
§§___§§________§§___§§_ §§§§
_§§§__§§§§§§§§§§__§§§__
___§§§__________§§§____
_____§§§______§§§______
_______§§§§§§§§________
J´ai retravaillé mon code, pour un resultat meilleur, mais il ne marche pas a 100%
Voici le nouveau code, j´ai guardé waitkey, et j´ai viré l´autre facon, car de 1, j´n ai besoin que d´une, et de deux, une boucle separé est mieux, sinon, si je rajoue des trucs apres, cela ne marche pas :
SDL_Surface *screen;
SDL_Surface *firstscreen;
SDL_Surface *image;
SDL_Event event;
SDL_Rect rect1;
Uint8* keystate;
int x,y ;
void init_SDL()
{
SDL_Init(SDL_INIT_VIDEO);
screen = SDL_SetVideoMode(1024, 768, 32,SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_FULLSCREEN);
SDL_WM_SetCaption("Ma fenetre",NULL);
SDL_ShowCursor(0);
}
void waitkey()
{
while(1)
{
while(SDL_PollEvent(&))
{
if ( event.type == SDL_KEYDOWN)
{
if ( event.key.keysym.sym == SDLK_RETURN) return;
}
}
}
}
int main(int argc , char **argv)
{
SDL_Rect rect1;
init_SDL();
firstscreen = SDL_LoadBMP("image1.bmp");
rect1.x = 0;
rect1.y = 0;
rect1.w = 1024;
rect1.h = 768;
SDL_BlitSurface(firstscreen,NULL,screen,&1);
firstscreen=SDL_LoadBMP("image2.bmp");
rect1.x=500;
rect1.y=380;
rect1.w=1024;
rect1.h=768;
SDL_SetColorKey(firstscreen,SDL_SRCCOLORKEY , SDL_MapRGBA(firstscreen->format,255,0,255,0));
rect1.x=x;
rect1.y=y;
SDL_BlitSurface(image,NULL,screen,&1);
keystate=SDL_GetKeyState(NULL);
if(keystate[SDLK_DOWN])y++;
if(keystate[SDLK_UP])y--;
SDL_FreeSurface(screen);
firstscreen = SDL_LoadBMP("image3.bmp");
rect1.x=986;
rect1.y=333;
rect1.w=1024;
rect1.h=768;
SDL_SetColorKey(firstscreen,SDL_SRCCOLORKEY , SDL_MapRGBA(firstscreen->format,255,0,255,0));
SDL_BlitSurface(firstscreen,NULL,screen,&1);
SDL_Flip(screen);
waitkey();
SDL_ShowCursor(1);
SDL_Quit();
return 0;
}
Sur mon ecran s´affiche l´image 1 et l´image 3 parfaitement.
Par contre, l´image 2, celle qui doit bouger, ne s´affiche pas, je voudrais de l´aide sil vous plait, car j´ai supprimé des trucs et tout et tout, mais je n´ai pas trouvé la solution.
Maintenant, toutes les images s´affichent, mais la barre joueur 2 ne bouge pas...
Look :
SDL_Surface *screen;
SDL_Surface *firstscreen;
SDL_Event event;
SDL_Rect rect1;
Uint8* keystate;
int x,y ;
void init_SDL()
{
SDL_Init(SDL_INIT_VIDEO);
screen = SDL_SetVideoMode(1024, 768, 32,SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_FULLSCREEN);
SDL_WM_SetCaption("Ma fenetre",NULL);
SDL_ShowCursor(0);
}
void waitkey()
{
while(1)
{
while(SDL_PollEvent(&))
{
if ( event.type == SDL_KEYDOWN)
{
if ( event.key.keysym.sym == SDLK_RETURN) return;
}
}
}
}
int main(int argc , char **argv)
{
SDL_Rect rect1;
init_SDL();
firstscreen = SDL_LoadBMP("aire.bmp");
rect1.x = 0;
rect1.y = 0;
rect1.w = 1024;
rect1.h = 768;
SDL_BlitSurface(firstscreen,NULL,screen,&1);
firstscreen=SDL_LoadBMP("barre joueur 1.bmp");
rect1.x=0;
rect1.y=332.5;
rect1.w=1024;
rect1.h=768;
SDL_SetColorKey(firstscreen,SDL_SRCCOLORKEY , SDL_MapRGBA(firstscreen->format,255,0,255,0));
SDL_BlitSurface(firstscreen,NULL,screen,&1);
rect1.x=x;
rect1.y=y;
keystate=SDL_GetKeyState(NULL);
if(keystate[SDLK_DOWN])y++;
if(keystate[SDLK_UP])y--;
SDL_FreeSurface(screen);
firstscreen = SDL_LoadBMP("barre joueur 2.bmp");
rect1.x=986;
rect1.y=332.5;
rect1.w=1024;
rect1.h=768;
SDL_SetColorKey(firstscreen,SDL_SRCCOLORKEY , SDL_MapRGBA(firstscreen->format,255,0,255,0));
SDL_BlitSurface(firstscreen,NULL,screen,&1);
SDL_Flip(screen);
waitkey();
SDL_ShowCursor(1);
SDL_Quit();
return 0;
}
En fait, je ne comprend pas pourquoi elle ne bouge pas ?
7 messages de moi a la suite !
Mais quel tragedie !
Pourquoi etes vous si cruels !
Etes vous des diables ?