IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SDL Discussion :

Demande d'aide sur un code source


Sujet :

SDL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    avril 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2007
    Messages : 91
    Points : 67
    Points
    67
    Par défaut Demande d'aide sur un code source
    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+

  2. #2
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    janvier 2004
    Messages
    10 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : janvier 2004
    Messages : 10 383
    Points : 43 726
    Points
    43 726
    Par défaut
    Bien le bonjour,

    Le bout de code intéressant est celui-là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	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 incrémente alpha et si jamais alpha dépasse la valeur SDL_ALPHA_OPAQUE on fait la transition dans l'autre sens, à savoir qu'on va diminuer alpha (en changeant le signe de delta_alpha).
    Et de la même manière, en diminuant la valeur de alpha, on va immanquablement arriver en dessous de 0, auquel cas on rechange le signe de delta_alpha pour réaugmenter alpha.

    Quand on dépasse la valeur max on diminue alpha
    Quand on est inférieur à la valeur min, on augmente alpha.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    avril 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2007
    Messages : 91
    Points : 67
    Points
    67
    Par défaut
    Ah ok j'ai bien compris.

    Donc en faite plus je met une petite valeur à delta_alpha, plus la transition sera lente (et inversement).

    Moi j'avais compris qu'on incrémentait aussi delta_alpha :s

    Merci de ton explication

    A+

    PS: on aurait pu remplacer :
    Par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    else if(alpha<=SDL_ALPHA_TRANSPARENT)
    Non ?

  4. #4
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : décembre 2005
    Messages : 5 121
    Points : 11 857
    Points
    11 857
    Par défaut
    Citation Envoyé par Soward

    PS: on aurait pu remplacer :
    Par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    else if(alpha<=SDL_ALPHA_TRANSPARENT)
    Non ?
    Oui, cela fonctionnerait aussi.

    Jc

Discussions similaires

  1. Demande d'aide sur mon code en C
    Par tekos22 dans le forum Débuter
    Réponses: 7
    Dernier message: 31/12/2009, 11h08
  2. Demande d'aide sur un code JAVA
    Par schine dans le forum Langage
    Réponses: 6
    Dernier message: 02/06/2009, 22h43
  3. demande d'aide sur un code de KSH
    Par adil.N dans le forum Linux
    Réponses: 1
    Dernier message: 08/05/2008, 22h42
  4. Demande d'aide sur mon code
    Par b.soufiane dans le forum C++
    Réponses: 6
    Dernier message: 07/12/2007, 17h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo