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

C++ Discussion :

Afficher une image ..apres une autre.. dans un delay de 1sec


Sujet :

C++

  1. #1
    Membre éclairé
    Avatar de Happy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2005
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Autre

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2005
    Messages : 665
    Points : 875
    Points
    875
    Par défaut Afficher une image ..apres une autre.. dans un delay de 1sec
    Bonjour,

    J'arrive pas a faire ce ke je veu: Afficher une image ..apres une autre.. dans un delay de 1sec ..

    voici un lien pour telecharger les images : http://rapidshare.de/files/2842169/images_SDL.rar

    le code:

    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
    #include "SDL/SDL.h"
     
    SDL_Surface * mem;
    SDL_Event event;
    void initsdl()
    {
         SDL_Init(SDL_INIT_VIDEO);
         mem = SDL_SetVideoMode(774,484,32,SDL_HWSURFACE|SDL_DOUBLEBUF);
    }
     
    int main(int argc, char **argv)
    {
        SDL_Surface * sec1[9],*fond;
        SDL_Rect rsec1[9],rfond;
        initsdl();
        int sx=1,sy=1;
        sec1[0]= SDL_LoadBMP("0.bmp"); //chaque chiffre
        sec1[1] = SDL_LoadBMP("1.bmp"); //chaque chiffre
        sec1[2] = SDL_LoadBMP("2.bmp");
        sec1[3] = SDL_LoadBMP("3.bmp");
        sec1[4] = SDL_LoadBMP("4.bmp");
        sec1[5] = SDL_LoadBMP("5.bmp");
        sec1[6] = SDL_LoadBMP("6.bmp");
        sec1[7] = SDL_LoadBMP("7.bmp");
        sec1[8] = SDL_LoadBMP("8.bmp");
        sec1[9] = SDL_LoadBMP("9.bmp");
        fond = SDL_LoadBMP("sub.bmp"); //l'image de fond..
        rfond.x = 0;
        rfond.y = 0;
        rsec1[9].x = 0;
        rsec1[9].y = 0;
     
    while (1)
    {
     
        SDL_PollEvent (&event);
        if (event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_RETURN)
        break;
     
     
     
        //SDL_SetColorKey(sec1[9],SDL_SRCCOLORKEY,SDL_MapRGBA(sec1[9]->format,255,0,255,0));
        SDL_BlitSurface(fond,NULL,mem,&rfond);
        int etape=1;
        etape ++;
     
     
        if (etape == 10)
        {
          etape = 0;
        }
     
        if (etape == 0)
         {
          SDL_BlitSurface(sec1[0],NULL,mem,&rsec1[9]);
           {
            if (etape == 1)
             {
              SDL_BlitSurface(sec1[1],NULL,mem,&rsec1[9]);
               if (etape == 2)
                {
                 SDL_BlitSurface(sec1[2],NULL,mem,&rsec1[9]);
                  {
                   if (etape == 3)
                    {                                         
                     SDL_BlitSurface(sec1[3],NULL,mem,&rsec1[9]);
                      {
                       if (etape == 4)
                        {
                         SDL_BlitSurface(sec1[4],NULL,mem,&rsec1[9]);
                          {
                           if (etape == 5)
                            {
                             SDL_BlitSurface(sec1[5],NULL,mem,&rsec1[9]);
                              {
                               if (etape == 6)
                                {
                                 SDL_BlitSurface(sec1[6],NULL,mem,&rsec1[9]);
                                  {
                                   if (etape == 7);
                                    {
                                     SDL_BlitSurface(sec1[7],NULL,mem,&rsec1[9]);
                                      {
                                       if (etape == 8)
                                        {
                                         SDL_BlitSurface(sec1[8],NULL,mem,&rsec1[9]);
                                          {
                                           if (etape == 9)
                                            {
                                             SDL_BlitSurface(sec1[9],NULL,mem,&rsec1[9]);
                                            }}}}}}}}}}}}}}}}}}
        SDL_Flip(mem);
        SDL_Delay(1000);
    }
     SDL_Quit();
    }
    Vous avez une solution plus simple et efficace?
    Merci d'avance

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Plus simple ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    int etape = 0; // en dehors de la boucle ! sinon tu auras toujours etape = 1
     
    while (1)
    {
        // ...
     
        etape = (etape + 1) % 10
     
        SDL_BlitSurface(sec1[etape], NULL, mem, &rsec1[9]);
     
        SDL_Flip(mem);
        SDL_Delay(1000);
    }
    Par contre si SDL_Delay bloque toute l'application, ce n'est pas une bonne solution. Il te faudra plutôt passer par les SDL_Timer je pense.

  3. #3
    Membre éclairé
    Avatar de Happy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2005
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Autre

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2005
    Messages : 665
    Points : 875
    Points
    875
    Par défaut
    Merci, ca marche parfaitement

    le nouvô code donne:
    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
    #include "SDL/SDL.h"
     
    SDL_Surface * mem;
    SDL_Event event;
    void initsdl()
    {
         SDL_Init(SDL_INIT_VIDEO);
         mem = SDL_SetVideoMode(774,484,32,SDL_HWSURFACE|SDL_DOUBLEBUF);
    }
     
    int main(int argc, char **argv)
    {
        SDL_Surface * sec1[9],*fond;
        SDL_Rect rsec1[9],rfond;
        initsdl();
        int sx=1,sy=1;
        sec1[0]= SDL_LoadBMP("0.bmp"); //chaque chiffre
        sec1[1] = SDL_LoadBMP("1.bmp"); //chaque chiffre
        sec1[2] = SDL_LoadBMP("2.bmp");
        sec1[3] = SDL_LoadBMP("3.bmp");
        sec1[4] = SDL_LoadBMP("4.bmp");
        sec1[5] = SDL_LoadBMP("5.bmp");
        sec1[6] = SDL_LoadBMP("6.bmp");
        sec1[7] = SDL_LoadBMP("7.bmp");
        sec1[8] = SDL_LoadBMP("8.bmp");
        sec1[9] = SDL_LoadBMP("9.bmp");
        fond = SDL_LoadBMP("sub.bmp"); //l'image de fond..
        rfond.x = 0;
        rfond.y = 0;
        rsec1[9].x = 0;
        rsec1[9].y = 0;
        int etape = 0; // en dehors de la boucle ! sinon tu auras toujours etape = 1
    while (1)
    {
          SDL_PollEvent (&event);
        if (event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_RETURN)
        break;
     
     
     
        SDL_SetColorKey(sec1[etape],SDL_SRCCOLORKEY,SDL_MapRGBA(sec1[etape]->format,255,0,255,0));
        SDL_BlitSurface(fond,NULL,mem,&rfond);
        etape = (etape + 1) % 10;
        SDL_BlitSurface(sec1[etape],NULL,mem,&rsec1[9]);
        SDL_Flip(mem);
        SDL_Delay(1000);
    }
     SDL_Quit();
    }
    En plus c'est plus court et simple!

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    N'oublie pas le bouton "Résolu" en bas à gauche, si c'est le cas

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/06/2013, 14h36
  2. Déplacer une image d'une feuille vers une autre dans un fichier Excel
    Par helenaide dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/10/2011, 14h27
  3. Affichage d'une image aprés sa selection dans un filechooser
    Par dxdiag dans le forum GTK+ avec C & C++
    Réponses: 6
    Dernier message: 03/02/2008, 23h23
  4. copier une partie d'une image vers une autre
    Par gregcat dans le forum Langage
    Réponses: 1
    Dernier message: 14/04/2006, 13h39
  5. VBA : copier une image d'une feuille excel à une autre
    Par Equus dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 08/12/2005, 14h01

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