Bonjour,

J'ai téléchargé le code source sur les fondus entre deux images.

Voici le code complet (comme sa vous n'avez pas à la télécharger !) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include <stdio.h>
#include <stdlib.h>
#include <SDL/SDL.h>
 
int main (int argc, char *argv[])
{
    /* Surface écran */
    SDL_Surface * sdlMainScreen;
 
    /* Surface contenant les deux images */
    SDL_Surface * sdlLoadedPicture1;
    SDL_Surface * sdlLoadedPicture2;
 
    /* Drapeau de fin de boucle */
    int quitProgram = 0;
 
    /* Valeur d'alpha */
    signed short alpha = 0;
 
    /* Delta d'alpha */
    signed char delta_alpha = 7;
 
    /* Initialisation de la partie Vidéo de SDL */
    if (SDL_Init (SDL_INIT_VIDEO) < 0)
        /* En cas d'échec, sortie */
        exit (1);
 
    /* Lorsque le programme se termine, il ferme SDL correctement */
    atexit(SDL_Quit);
 
    /* Demande d'affichage en 640x480 16 bits */
    /* SDL_SWSURFACE : la surface est crée en RAM système */
    /* SDL_DOUBLEBUF : on utilise deux buffers */
    sdlMainScreen = SDL_SetVideoMode (640, 480, 16, SDL_SWSURFACE | SDL_DOUBLEBUF);
 
    /* En cas d'echec, on sort */
    if (sdlMainScreen == NULL)
        exit (2);
 
    /* Charge l'image qui contient les sprites */
    sdlLoadedPicture1 = SDL_LoadBMP("image1.bmp");
    if(sdlLoadedPicture1==NULL)
        exit(3);
    sdlLoadedPicture2 = SDL_LoadBMP("image2.bmp");
    if(sdlLoadedPicture2==NULL)
        exit(3);
 
    /* Boucle principale */
    while (!quitProgram)
    {
        SDL_Event event;
 
        /* Lecture des évènements dans la queue d'évènements */
        while (SDL_PollEvent (&event))
        {
            switch (event.type)
            {
            /* Evenement de fermeture d'application, on sort la boucle */
            case SDL_QUIT:
                quitProgram = 1;
                break;
            }
        }
 
	alpha += delta_alpha;
	if(alpha>=SDL_ALPHA_OPAQUE)
	{
		alpha = SDL_ALPHA_OPAQUE;
		delta_alpha = -delta_alpha;
	}
	else if(alpha<=0)
	{
		alpha = 0;
		delta_alpha = -delta_alpha;
	}
 
	/* On efface l'écran */
	SDL_BlitSurface(sdlLoadedPicture1,NULL,sdlMainScreen,NULL);
 
	/* Mise à jour de l'alpha */
	SDL_SetAlpha(sdlLoadedPicture2,SDL_SRCALPHA,alpha);
 
	/* Affichage de l'image à l'écran */
	SDL_BlitSurface(sdlLoadedPicture2,NULL,sdlMainScreen,NULL);
 
        /* Echange des deux buffers */
        SDL_Flip(sdlMainScreen);
    }
 
    SDL_FreeSurface(sdlLoadedPicture1);
    SDL_FreeSurface(sdlLoadedPicture2);
 
    return 0;
}
J'ai du mal a comprendre comment varie les variables alpha et delta_alpha.

Par exemple une fois que alpha vaut 255, comment se fait t'il qu'elle redescende à 0 après ?

J'ai recopier le code, il fonctionne bien, mais bon j'aime pas recopier des codes que je ne comprend pas entièrement, donc je voulais savoir si vous pouviez me l'expliquer (je parle bien des variations de alpha et delta_alpha, le reste j'ai compris !)

A+