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 :

SDL_SetAlpha et pause ( );


Sujet :

SDL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 20
    Points : 10
    Points
    10
    Par défaut SDL_SetAlpha et pause ( );
    Salut ,

    J'ai un probleme je veu qu'une image clignote donc j'ai fait sa :
    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
     
    void clignotement (long *clignote)  // On fait clignoter notre image.
    {
        for (clignote = 0 ;clignote <= 0; clignote++)
        {
        long tableau [10];    
        tableau[0] = 0;
        tableau[1] = 70;
        tableau[2] = 128;
        tableau[3] = 255;
        tableau[4] = 255;
        tableau[5] = 255;
        tableau[6] = 255;
        tableau[7] = 128;
        tableau[8] = 70;
        tableau[9] = 0;
        }
    }
    puis sa :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SDL_SetAlpha(start, SDL_SRCALPHA, 0);
    SDL_SetAlpha = clignotement;
    et sa ne marche pas comment faire ?

    aussi dans mon code je ne sais pas ou mettre ma fonction pause :

    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
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL/SDL.h>
     
    void pause();
    void clignotement ();
     
    int main(int argc, char *argv[])
    {
        SDL_Surface *ecran = NULL, *aries = NULL, *jauge = NULL, *depart = NULL, *texte = NULL, *start = NULL;
        long *clignote = 0;
        long tableau [10];
        SDL_Rect positionAries;
        SDL_Rect positionJauge;
        SDL_Rect positionDepart;
        SDL_Rect positionTexte;
        SDL_Rect positionStart;
        SDL_Event event;
        int continuer = 1, intro = 1;
        SDL_Init(SDL_INIT_VIDEO);
     
        ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE);
        SDL_WM_SetCaption("Mon jeu en cour de developement...", NULL);
     
     
        while (intro == 1)
        {
     
           /* Chargement du fond de presentation */
           depart = SDL_LoadBMP("presentation.bmp");
           SDL_SetColorKey(depart, SDL_SRCCOLORKEY, SDL_MapRGB(depart->format, 0, 255, 0));
     
           /* Chargement du texte de presentation */
           depart = SDL_LoadBMP("texte.bmp");
           SDL_SetColorKey(texte, SDL_SRCCOLORKEY, SDL_MapRGB(texte->format, 0, 255, 0));
     
           /* Chargement du start de presentation */
           depart = SDL_LoadBMP("start.bmp");
           SDL_SetColorKey(start, SDL_SRCCOLORKEY, SDL_MapRGB(start->format, 0, 255, 0));
     
     
           positionDepart.x = 0;
           positionDepart.y = 0;
     
           positionTexte.x = 543;
           positionTexte.y = 0;
           positionStart.x = 250;
           positionStart.y = 400;
           SDL_SetAlpha(start, SDL_SRCALPHA, 0);
           SDL_SetAlpha = clignotement;
           SDL_BlitSurface(depart, NULL, ecran, &positionDepart); /* On place le depart à sa nouvelle position */
           SDL_BlitSurface(texte, NULL, ecran, &positionTexte); /* On place le texte à sa nouvelle position */
           SDL_BlitSurface(start, NULL, ecran, &positionStart); /* On place start à sa nouvelle position */
     
           if (intro == 1)
           {
            SDL_WaitEvent(&event);
            switch(event.type)
            {
                case SDL_QUIT:
                    continuer = 0;
                    break;
                case SDL_KEYDOWN:
                    switch(event.key.keysym.sym)
                    {
                     case SDLK_KP_ENTER :
                          intro = 0   ;
                          break;
                    }
                    break;
                    default :
                    intro = 1 ;  
                    break; 
                    }
     
            }         
     
        }
          pause();
        SDL_FreeSurface(depart);
        SDL_FreeSurface(texte);
        SDL_FreeSurface(start);
     
     
     
     
        /* Chargement de Aries */
        aries = SDL_LoadBMP("ariescombatant.bmp");
        SDL_SetColorKey(aries, SDL_SRCCOLORKEY, SDL_MapRGB(aries->format, 0, 255, 0));
     
        /* Chargement de notre Jauge */
        jauge = SDL_LoadBMP("jauge_baton.bmp");
        SDL_SetColorKey(jauge, SDL_SRCCOLORKEY, SDL_MapRGB(jauge->format, 255, 0, 0));
     
        /* On centre Aries à l'écran */
        positionAries.x = ecran->w / 2 - aries->w / 2;
        positionAries.y = ecran->h / 2 - aries->h / 2;
     
        /* On cadre notre Jauge à l'écran */
        positionJauge.x = 0;
        positionJauge.y = 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: // Flèche haut
                            positionAries.y-=10;
                            break;
                        case SDLK_DOWN: // Flèche bas
                            positionAries.y+=10;
                            break;
                        case SDLK_RIGHT: // Flèche droite
                            positionAries.x+=10;
                            break;
                        case SDLK_LEFT: // Flèche gauche
                            positionAries.x-=10;
                            break;
                    }
                    break;
            }
     
            SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0)); /* On efface l'écran */
            SDL_BlitSurface(aries, NULL, ecran, &positionAries); /* On place Aries à sa nouvelle position */
            SDL_BlitSurface(jauge, NULL, ecran, &positionJauge); /* On place la jauge à sa nouvelle position */
            SDL_Flip(ecran); /* On met à jour l'affichage */
        }
        SDL_Flip(ecran); /* On met à jour l'affichage */
        SDL_FreeSurface(aries);
        SDL_FreeSurface(jauge);
        pause () ;
        SDL_Quit();
        return EXIT_SUCCESS;
    }
     
    void pause()
    {
        int continuer = 1;
        SDL_Event event;
     
        while (continuer)
        {
            SDL_WaitEvent(&event);
            switch(event.type)
            {
                case SDL_QUIT:
                    continuer = 0;
                    break;
            }
        }
    }
    void clignotement (long *clignote)  // On fait clignoter notre image.
    {
        for (clignote = 0 ;clignote <= 0; clignote++)
        {
        long tableau [10];    
        tableau[0] = 0;
        tableau[1] = 70;
        tableau[2] = 128;
        tableau[3] = 255;
        tableau[4] = 255;
        tableau[5] = 255;
        tableau[6] = 255;
        tableau[7] = 128;
        tableau[8] = 70;
        tableau[9] = 0;
        }
    }
    Car defois la fenetre reste mais rien ne s'affiche , defois la fenetre aparait une fraction de seconde et tout s'affiche...spéciale hein...

    Merci de vos réponses

  2. #2
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    ouh là...
    Ca compile ce code ?

    Parce que tu déclares une fonction sans paramètres qui ne retourne rien (void), tu la définis avec en paramètre un pointeur vers un long, tu ne l'appeles pas (du moins je ne pense pas que "clignotement" soit la même chose que "clignotement()"...) et tu essaie de passer son résultat (donc rien) à une variable SDL_SetAlpha qui n'existe pas !

    Et pour finir, ta fonction "void clignotement (long *clignote)" ne fais rien du tout (ou plutôt elle crée des tableaux temporaires qui ne sont pas utilisés).

    Bref je ne sais pas comment tu as créé ce code, mais je te conseille de refaire quelques tutoriels simples de C puis de SDL...

    Ou alors j'ai vraiment rien compris (ce qui est ma fois possible aussi )

  3. #3
    Membre actif Avatar de Sixissor
    Étudiant
    Inscrit en
    Février 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 206
    Points : 242
    Points
    242
    Par défaut
    Citation Envoyé par Eusebe
    Et pour finir, ta fonction "void clignotement (long *clignote)" ne fais rien du tout (ou plutôt elle crée des tableaux temporaires qui ne sont pas utilisés).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void clignotement (long *clignote)  // On fait clignoter notre image.
    {
        for (clignote = 0 ;clignote <= 0; clignote++)
    {...}
    Tu passes en paramètre un long clignote pour le remettre à 0 dans le for ??
    En plus comme tu fais ton "for" qu'une fois, autant enlever le "for"

    A mon avis tu voulais faire ça (peut-être...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void clignotement (long *clignote)  // On fait clignoter notre image.
    {
        long i;
        for (i = 0 ;i <= clignote; i++)
    {...}
    A mon avis c'est des erreurs d'inattention

    ++
    • Awesome dude ! R0FLC0PT3R !!!!11!ONE!!!
    • There's no place like 127.0.0.1

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    Salut ,

    euh il y a quelques erreurs d'innattention...
    mais aussi des fautes .Je ne savais pas vraimment comment faire clignoter une image l'idée c'etait que l'image soit transparente une fois sur 2 tant que le joueur n'avait pas pressé la touche entrée mais bon...
    je ne savé vraimment pas comment faire (si c possible de m'expliquèer comment on fé sa serait cool) et bin je suis pas un expert au niveau des creation de fonction donc bon lol...

    Merci de m'expliquer...(quand je compile il n'y a qu'une erreur)

  5. #5
    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 : 43
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par nooblender
    Salut ,

    euh il y a quelques erreurs d'innattention...
    mais aussi des fautes .Je ne savais pas vraimment comment faire clignoter une image l'idée c'etait que l'image soit transparente une fois sur 2 tant que le joueur n'avait pas pressé la touche entrée mais bon...
    je ne savé vraimment pas comment faire (si c possible de m'expliquèer comment on fé sa serait cool) et bin je suis pas un expert au niveau des creation de fonction donc bon lol...

    Merci de m'expliquer...(quand je compile il n'y a qu'une erreur)
    Pour rendre une image clignottante, tu passes par une phase où tu dessines l'image à une phase où tu ne dessines pas l'image. S'amuser à changer la couleur Alpha est une mauvaise idée.

    Voici un code qui montre le principe. Bien sûr, si tu dois faire cela pour plusieurs surfaces, une structure englobant le fait que l'image est transparente, le dernier changement de phase et un pointeur vers la surface sera mieux...

    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
     
    #include <SDL.h>
    #include <iostream>
     
     
    const int WIDTH=640;
    const int HEIGHT=480;
    const int TEMPS_PHASE=1000;
     
    int main(int argc, char **argv)
    {
        //Déclaration des variables
        SDL_Event event;
        SDL_Surface *screen;
        int done = 0;
        bool transparent=true;
        unsigned int dernier_changement;
     
     
        //Initialisation de SDL
        if(SDL_Init(SDL_INIT_VIDEO)!=0)
        {
            std::cerr << "Probleme pour initialiser SDL" << SDL_GetError() << std::endl;
            return 1;
        }
     
        //Mettre un titre à la fenêtre
        SDL_WM_SetCaption("Programme SDL de base", NULL);
        //Ouvrerture d'une surface pour l'affichage de la fenêtre
        screen = SDL_SetVideoMode(WIDTH,HEIGHT, 32,
                                  SDL_DOUBLEBUF | SDL_HWSURFACE);
        if(screen==NULL)
            done = 1;
     
        dernier_changement = SDL_GetTicks();
        //Boucle generale
        while(!done)
        {
            //Traiter les évènements
            while(SDL_PollEvent(&event))
            {
                switch(event.type)
                {
                    //Si on veut quitter, done=1 suffira
                    case SDL_QUIT:
                    done=1;
                    break;
                    //Si on vient de relacher une touche de clavier
                    case SDL_KEYUP:
                    //Et si c'est la lettre q
    		/*
    		 Attention, ceci ne fonctionne pas avec tous les Systèmes d'exploitation et tous les claviers
    		 Pour le rendre portable, il faudrait passer par les Unicodes, mais cela sort du cadre de ce tutoriel
    		 d'introduction.
    		 Si vous voulez utiliser la lettre 'q' pour quitter et ceci ne fonctionne pas, alors c'est la lettre
    		 'a' qu'il faudra utiliser (c'est la place de la lettre 'q' sur le clavier QWERTY).
    		 Si vous voulez vraiment la lettre 'q', remplacer SDLK_q par SDLK_a, cela devrait faire l'affaire
    		 */
                    if(event.key.keysym.sym==SDLK_q)
                        //On met done a 1 pour quitter
                        done=1;
                    break;
                    //Sinon on ne fait rien
                    default:
                    break;
                }
            }
     
            //On met la couleur de fond : noir
            SDL_FillRect(screen,NULL,SDL_MapRGB(screen->format,0,0,0));
     
            //Si l'image n'est pas transparente, on la dessine
            if(!transparent) {
                SDL_FillRect(screen,NULL,SDL_MapRGB(screen->format,255,0,0));
            }
     
            //On regarde si la phase s'est terminee
            if(SDL_GetTicks()>dernier_changement+TEMPS_PHASE)
              {
              dernier_changement = SDL_GetTicks();
              transparent = !transparent;
              }
            SDL_Flip(screen);
        }
     
        SDL_Quit();
     
        (void) argc;
        (void) argv;
        return 0;
    }
    Jc

Discussions similaires

  1. Pause de 1 ns
    Par mikevador02 dans le forum Assembleur
    Réponses: 17
    Dernier message: 25/07/2003, 23h30
  2. Pause et reprise d'un thread
    Par raggadoll dans le forum Linux
    Réponses: 5
    Dernier message: 03/07/2003, 20h22
  3. Pause dans une boucle
    Par HT dans le forum Langage
    Réponses: 4
    Dernier message: 03/06/2003, 08h52
  4. [LG]Pause de programme ou Break time
    Par lvdnono dans le forum Langage
    Réponses: 11
    Dernier message: 17/05/2003, 17h23
  5. Programmer une pause brève
    Par NeoMan dans le forum Assembleur
    Réponses: 14
    Dernier message: 28/04/2003, 01h59

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