A mon avis t´as pas compris l´utilité de mon code. Son utilité c´est une image qui se déplace. Si l´ecran reste noir c´est car y´a un problème soit au flip, soit au blit soit au chargement...
Si si, j´ai compri l´utilité de ton programme car je l´ai essayé, il a marché.
Mais je l´ai adapté sur ce que j´etait en train de faire, au debut l´ecran etait noir, j´ai fait des changements, et maintenant, il y a tous les graphismes, mais ca ne bouge toujours pas, tu comprends?
Bon, le HD de mon ordi portable a grillé. L´ordi est au SAV pour 3 semaines. Sur le pc où je suis je peux vraiment rien faire pour t´aider... ( vous imaginez ? Windows 98, IE 4, pas d´outils de Dev...)
ok, sinon, j´avais reussi a faire un ti truc, l´image 1 s´affichait mais clignotait, et l´image deux bougeait mais n´allait que en bas, et s´aggrandissait, c´est le meilleur resultat que j´ai pu faire, hommage a feu l´ordinateur portable de vengeur 41
Bonjour, toutes les images s´affichent, mais le probleme persiste, j´appui sur la touche du haut, et rien ne se passe, je ne sais pas pourquoi, si quelqu´un si connait, qu´il m´induise dans le droit chemin. Voici le programme :
SDL_Surface* screen;
SDL_Surface* firstscreen;
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);
}
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=20;
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_Event event;
SDL_WaitEvent(&);
switch ( event.type)
{
case SDLK_UP:
printf("La touche %s a été préssée!\n",
SDL_GetKeyName(event.key.keysym.sym));
break;
}
}
firstscreen=SDL_LoadBMP("barre joueur 2.bmp");
rect1.x=987;
rect1.y=332.5;
rect1.w=1024;
rect1.h=768;
SDL_SetColorKey(firstscreen,SDL_SRCCOLORKEY,SDL_Ma
pRGBA(firstscreen->format,255,0,255,0));
SDL_BlitSurface(firstscreen,NULL,screen,&1);
SDL_Flip(screen);
waitkey();
SDL_ShowCursor(1);
SDL_Quit();
return 0;
}
d´´avance a ceux qui pourront m´aider.
Tout simplement parce que ton code veut rien dire. Tu devrais vraiment regarder la documentation de SDL.
SDLK_UP n´a rien a faire ici, ce n´est pas un event.type ! SDL_KEYUP ( ou un truc dans ce gout) par contre oui. Et vaut mieux un SDL_KEYDOWN.
Ca doit marcher, meme si ton code est pas super...
Non, cela ne marche toujours pas c´est tres bizarre, et SDL_KEYUP, c´est la fleche de haut non
Un regle de plus a retenir mon ami, c´est pas du up. Les gens qui t´ont aider suivent ta conversation, donc pas de probleme si ton topic descend dans la liste, tu aura tes reponses.
SDL_KEYUP, ca veut dire qu´une touche est relaché je pense ( SDL_KEYDOWN veut dire qu´une touche est appuyée).
ok j´avais pas compri avant, donc,mon programme ne fpnctionne tjs pas...
ben en lisant, je vois rien de bizarre. Il faudrait que tu mette des printf ou des breakpoints dans ton fonction WaitKey et voir ainsi ce qu´il se passe quand tu appuie sur une touche et lire la valeur de ce que tu test, tu test peut etre la mauvaise touche.
Je ne sais pas trop ou mettre les print f et autres trucs, mais j´ai enlevé toutes les images pour savoirsi l´ecriture etait en dessous des images, et bien non, cela donne ca :
SDL_Surface* screen;
SDL_Surface* firstscreen;
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);
}
void waitkey()
{
while(1)
{
while(SDL_PollEvent(&))
{
if ( event.type == SDL_KEYUP)
{
if ( event.key.keysym.sym == SDLK_RETURN) return;
}
}
}
}
int main(int argc , char **argv)
{
SDL_Rect rect1;
init_SDL();
{
SDL_Event event;
SDL_WaitEvent(&);
switch ( event.type)
{
case SDL_KEYDOWN:
printf("La touche %s a été préssée!\n",
SDL_GetKeyName(event.key.keysym.sym));
break;
}
}
SDL_Flip(screen);
waitkey();
SDL_ShowCursor(1);
SDL_Quit();
return 0;
}
l´ecran est tjs noir.
SDL_Surface* screen;
SDL_Surface* firstscreen;
SDL_Event event;
bool bQuit=false, eventwait=true;
void init_SDL()
{
SDL_Init(SDL_INIT_VIDEO);
screen = SDL_SetVideoMode(1024, 768, 32,SDL_HWSURFACE|SDL_DOUBLEBUF);
SDL_ShowCursor(0);
}
void waitkey()
{
while(1)
{
while(SDL_PollEvent(&))
{
if ( event.type == SDL_KEYUP)
{
if ( event.key.keysym.sym == SDLK_RETURN) return;
}
}
}
}
int main(int argc, char *argv[])
{
SDL_Rect rect1;
init_SDL();
SDL_Event event;
while ( !bQuit && eventwait)
{
if ( SDL_PollEvent(&))
{
switch ( event.type)
{
case SDL_KEYDOWN:
printf("La touche %s a été préssée!\n",
SDL_GetKeyName(event.key.keysym.sym));
eventwait=false;
break;
case SDL_QUIT:
bQuit=true;
break;
}
}
}
SDL_Flip(screen);
waitkey();
SDL_ShowCursor(1);
SDL_Quit();
}
Le programme fonctionne. Mais SDL a redirigé stdout vers stdout.txt et non vers la console.
Donc le resultat s´affiche dans ce fichier texte.
Il semblerait donc que ce genre d´events ne fonctionne pas avec WaitEvent mais juste avec PollEvent.
P.S. : Enleve le eventwait=false, le programme tournera en boucle.
Ah ouais ok, j´avais pas compri avant, sinon, es ce que tu arriverais a melanger 2 codes, c´est a dire :
Le premier, ou une image de fond s´affiche, une image a droite s´affiche, une image a gauche s´affiche.
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_ESCAPE) 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);
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;
}
_______________________________________________
Le deuxieme programme que tu a fait, qui fait bouger une image :
SDL_Surface *screen, *image, *firstscreen;
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_DOUBLEBUF);
SDL_WM_SetCaption("Ma fenetre",NULL);
image=SDL_LoadBMP("barre.bmp");
x=500;
y=380;
SDL_SetColorKey(image,SDL_SRCCOLORKEY , SDL_MapRGBA(image->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(&) && 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;
}
________________________________________________
En gardant le code premier, je voudrais bouger l´image de gauche avec le code 2.
J´essaye :
SDL_Surface *screen;
SDL_Surface *firstscreen;
SDL_Event event;
Uint8 *keystate;
SDL_Rect rect1;
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_ESCAPE) 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=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);
while(keystate)
{
SDL_FillRect(screen,NULL,0);
rect1.x=x;
rect1.y=y;
SDL_Flip(screen);
keystate=SDL_GetKeyState(NULL);
if ( keystate[SDLK_DOWN])y++;
if ( keystate[SDLK_UP])y--;
}
firstscreen = SDL_LoadBMP("barre joueur 2.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);
SDL_FreeSurface(screen);
waitkey();
SDL_ShowCursor(1);
SDL_Quit();
return 0;
}
Mais la barre joueur 1 ne bouge pas, si tu arrives, se serai cool, car pourtant, le programme se lance.