Pour tout vous expliquer, je n´arrive pas a rajouter une image apres une image plein ecran, je vais donc mettre le code et si une bonne ame passe par ici, il pourrait rajouter les lignes necessaires avec tout ms remerciments si necessaires. (sous dev c++)
Voici le truc :
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("image.bmp");
rect1.x = 0;
rect1.y = 0;
rect1.w = 1024;
rect1.h = 768;
SDL_BlitSurface(firstscreen,NULL,screen,&1);
SDL_Flip(screen);
waitkey();
SDL_ShowCursor(1);
SDL_Quit();
return 0;
}
d´avance
A plus
Pas compris la question . ..
Sinon c´est le code du tuto de JYY sur le sdl ça
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("image.bmp");
SDL_BlitSurface(firstscreen,NULL,screen,NULL);
SDL_Flip(screen);
waitkey();
SDL_ShowCursor(1);
SDL_FillRect(screen,NULL,0);
firstscreen = SDL_LoadBMP("image2.bmp");
SDL_BlitSurface(firstscreen,NULL,screen,NULL);
SDL_Flip(screen);
waitkey();
SDL_Quit();
return 0;
}
Si j´ai bien compris la question...
Au fait je trouve la fonction waitkey très " porc" ( enfin, dans ma façon de voir les choses), rien que la gestion du clavier par events j´aime pas ca, sortir d´une boucle while infinie ( j´aime pas les while infinies d´abord, na ! ) en " forcant" non plus... Ma fonction waitkey() :
void waitkey()
{
Uint8 *keystate = keystate = SDL_GetKeyState(NULL);
unsigned short i;
bool keypressed=false;
while ( !keypressed)
{
keystate = SDL_GetKeyState(NULL);
for ( i=0;i<256;i++)
{
if ( keystate[i]){keypressed=true; i=256;}
}
eventloop();
}
}
Bon ok mon exemple est ptet laid mais je préfère largement ça... Fin bon, c´est toi qui vois ; )
Oui, c´est es cours de JYY que je remercie au passage.
En fait, je veux mettre une image en plein ecran comme cela, mais je voudrais rajouter d´autres images que je pourrais mettre n´importe ou avec x et y, mais je ne sais pas comment faire, quelles lignes mettre, a quels endroits ?
Tu comprends ?
Merci vengeur mais il y a un petit probleme,
J´execute, ca affiche la premiere image
Je fait entré
La deuxieme image s´affiche
Je fait entré
Cela retourne sous windows
Et je voudrais les deux images en meme temps, you understand ?
SDL_Rect rcdst;
SDL_Surface *screen;
SDL_Surface *mesimages[15];
int i;
char nomfichier[40];
for ( i=0;i<15;i++)
{
sprintf(nomfichier,"image%d.bmp",i+1);
mesimages[i] = SDL_LoadBMP(nomfichier);
rcdst.x = rand()%(640-150);
rcdst.y = rand()%(480-150);
SDL_BlitSurface(mesimages[i],NULL,screen,&);
}
SDL_Flip(screen);
waitkey();
Voilà, met ca dans ton code après l´init de SDL ( tu as dja screen je pense). Crée 15 images que tu nomme image1.bmp à image15.bmp de 150x150 et observe le résultat.
boah, ma fonction waitkeyr, elle est pratique
mais je ne m´en sers plus des le chapitre 1.4 ou je fais une fonction UpdateEvent qui masque toute la pile d´event de SDL !
Apres, pour faire un waitkey ( pour return), il suffit de faire :
while(!Key(SDLK_RETURN))
{
UpdateEvents();
}
voila
Ah ouais je vois,bon je vais faire de mon mieux
On créer un nouveau SDL_Surface en haut avec les autres qui portera le nom que tu veux.
On déclare un nouveau Rect que l´on va nommer rect2 qui aura des coordonnés différentes du rect1,là,c´est toi qui choisis la position
Ensuite, " Loader" les images correspondantes pour tes nouvelles surfaces ( au début du int main avec les autres SDL_Loadimage)
Et finalement,placer a la suite les fonctions de Blit et de Flip de l´autre qui fait apparaitre image1.bmp
Bon je procède comme ça,je trouve ça sale,donc je vais me faire tout petit et laisser les experts montrer une méthode simple et propre
Déclarer des rects différents ? Pourquoi faire ? Une fois l´image blittée, le rect sert plus à rien, tu le ré-utilise ! Et voilà t´as un code tout propre...
de meme - pub pour mon futils commencé - si tu regardes mon jeu de promenade, j´ai programmé une fonction " Blit" qui gere en interne des Rect, mais cependant, des que la fonction est faite, tu n´as plus du tout a créer des rect et tout
tu mets :
Blit(source, x1,y1,x2,y2 , dest, x3,y3)
et pan, ça marche !
J´ai fait ca mais il n´y a que l´image 2 qui s´affiche :
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("image1.bmp");
rect1.x = 0;
rect1.y = 0;
rect1.w = 1024;
rect1.h = 768;
SDL_BlitSurface(firstscreen,NULL,screen,&1);
SDL_Flip(screen);
SDL_Rect rect2;
init_SDL();
firstscreen = SDL_LoadBMP("image2.bmp");
rect1.x = 10;
rect1.y = 13;
rect1.w = 640;
rect1.h = 780;
SDL_BlitSurface(firstscreen,NULL,screen,&1);
SDL_Flip(screen);
waitkey();
SDL_ShowCursor(1);
SDL_Quit();
return 0;
}
Et pour le truc de JYY, j´ai pas pigé ? ??
de meme - pub pour mon futils commencé - si tu regardes mon jeu de promenade, j´ai programmé une fonction " Blit" qui gere en interne des Rect, mais cependant, des que la fonction est faite, tu n´as plus du tout a créer des rect et tout
tu mets :
Blit(source, x1,y1,x2,y2 , dest, x3,y3)
et pan, ça marche !
j´ai pas encore mis en ligne la fonction surchargée ( ou plutot sous chargée)
Blit(source,dest,x,y);
plus simlpe, et permet de blitter une image entiere, et plus besoin de SDL_Rect...
Et bien on en apprends beaucoup sur ce forum
Je m´endormirais moins abruti ce soir
C´est normal :
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("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 = 10;
rect1.y = 13;
rect1.w = 640;
rect1.h = 780;
SDL_BlitSurface(firstscreen,NULL,screen,&1);
SDL_Flip(screen);
waitkey();
SDL_ShowCursor(1);
SDL_Quit();
return 0;
}
Là ca doit marcher.
Et on initialise pas 2 fois la SDL !
Regarde ton code, image2 est sur rect1 au lieu de rect2,pareil quand tu définis rect2
Mais bon jvais me taire pour éviter de t´induire dans l´erreur . ..
Moule > Vaut mieux...
enormelent vengeur41, cela fonctionne, et je pourrais continuer ce que je faisait.
Sympa a vous, bon vent, et bonne nuit . ..
PS : j´ai scholl demain, vendredi : journee pedagogique : pas school, samedi dimanche : week end: pas school, lundi de pentecote, normalement ecole, mais j´y vais pas : pas school :
= WEEK END DE 4 JOURS
HOURRA, c´est la liberation des ecoles ! !!!!!!!!!!!!!!!!!!!!!!!!!
Nous sommes libres ! !!!!!!!!
Bon, sur ce, je vous dit ; A plus, et merci pour tout ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
:by:
Le lundi de pentecote n´a pas été supprimé ?
Ah sorry j´avais mal lu
Encore un truc que je n´arrive pas et que je pensais que j´allais reussir ; virer la couleur pour la rendre invisible.
Dans ce bout de code :
firstscreen = SDL_LoadBMP("image.bmp");
rect1.x = 0;
rect1.y = 332.5;
rect1.w = 1024;
rect1.h = 768;
SDL_BlitSurface(firstscreen,NULL,screen,&1);
Il faut rajouter la ligne :
SDL_SetAlpha(image,SDL_SRCALPHA,128);
Mais ou la mettre, j´ai essayé a plains d´endroits, tell que :
firstscreen = SDL_LoadBMP("image.bmp");
rect1.x = 0;
rect1.y = 332.5;
rect1.w = 1024;
rect1.h = 768;
SDL_SetAlpha(image,SDL_SRCALPHA,128);
SDL_BlitSurface(firstscreen,NULL,screen,&1);
Cela ne marche pas.
Ou alors :
firstscreen = SDL_LoadBMP("image.bmp");
SDL_SetAlpha(image,SDL_SRCALPHA,128);
rect1.x = 0;
rect1.y = 332.5;
rect1.w = 1024;
rect1.h = 768;
SDL_BlitSurface(firstscreen,NULL,screen,&1);
Aucun resultats, qui aurais la sympathie de m´indiquer la voie de la verité ?