1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
| #include <stdlib.h>
#include <stdio.h>
#include <sdl/sdl.h>
int main( int argc , char *argv[] )
{
/* Une variable ecran sur laquelle on blit tout */
SDL_Surface *ecran;
/* 256 surfaces pour le degradé */
SDL_Surface *degrade[256] = { NULL };
SDL_Event event ;
/* Une variable de position pour le tableau 'degrade' */
SDL_Rect pos;
int i = 0 ;
int continuer = 1 ;
SDL_Init(SDL_INIT_VIDEO);
ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
SDL_WM_SetCaption("Le Fond Ecran En SDL", NULL);
/* C'est avec SDL_CreateRGBSurface qu'on crée nos surfaces.
* SDL_SetVideoMode ne sert QUE pour la variable 'ecran' c'est tout */
for (i = 0; i < 256; i++)
degrade[i] = SDL_CreateRGBSurface(SDL_HWSURFACE, 640, 1, 32, 0, 0, 0, 0);
SDL_EnableKeyRepeat(10,10);
/* On blittera nos 'degrade' à la position x = 0
* y est variable */
pos.x = 0;
while(continuer)
{
SDL_WaitEvent(&event);
switch(event.type)
{
case SDL_QUIT :
continuer = 0 ;
break;
case SDL_KEYDOWN:
switch(event.key.keysym.sym)
{
case SDLK_UP :
/* On colorie nos 256 surfaces */
for (i = 0; i < 256; i++)
SDL_FillRect(degrade[i], NULL, SDL_MapRGB(degrade[i]->format, i, i, i));
break;
case SDLK_DOWN :
/* On les colories dans l'autre sens */
for (i = 255; i >= 0; i--)
SDL_FillRect(degrade[255-i], NULL, SDL_MapRGB(degrade[i]->format, i, i, i));
break;
}break;
}
/* On blitte sur la surface 'ecran'. Ce que tu as oublié de faire :p */
for (i = 0; i < 256; i++) {
pos.y = i;
SDL_BlitSurface(degrade[i], NULL, ecran, &pos);
}
/* On met à jour l'écran */
SDL_Flip(ecran);
}
/* On libère tout. Tu avais mis une boucle en trop */
for (i = 0; i < 256; i++)
SDL_FreeSurface(degrade[i]);
SDL_FreeSurface(ecran);
SDL_Quit();
return EXIT_SUCCESS;
} |
Partager