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 :

problème sdl blitter une image.!


Sujet :

SDL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 61
    Points : 35
    Points
    35
    Par défaut problème sdl blitter une image.!
    rebonsoir, excusez moi mais je ne comprends pas, regardez, je me suis relu au moins pendant 20 minutes et regardez ça ne marche toujours pas ???
    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
    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL/SDL.h>
     
    void pause();
    int main(int argc, char *argv[])
    {
        SDL_Surface *ecran = NULL, *imageDeFond = NULL, *zozor = NULL;
        SDL_Rect positionFond;
     
        positionFond.x = 0;
        positionFond.y = 0;
        positionZozor.x = 500;// c'est la l'erreur!
        positionZozor.y = 260;
     
        SDL_Init(SDL_INIT_VIDEO);
     
     
     
     
        ecran = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE);
        SDL_WM_SetCaption("Chargement d'images en SDL", NULL);
     
        imageDeFond = SDL_LoadBMP("lac_en_montagne.bmp");
        SDL_BlitSurface(imageDeFond, NULL, ecran, &positionFond);
     
     zozor = SDL_LoadBMP("zozor.bmp");
        SDL_BlitSurface(zozor, NULL, ecran, &positionZozor);
     
     
     
     
        SDL_Flip(ecran);
        pause();
     
        SDL_FreeSurface(imageDeFond);
        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;
            }
        }
    }

  2. #2
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 35
    Points : 41
    Points
    41
    Par défaut
    Citation Envoyé par mitherkiller
    rebonsoir, excusez moi mais je ne comprends pas, regardez, je me suis relu au moins pendant 20 minutes et regardez ça ne marche toujours pas ???
    Tu as simplement oublié de déclarer positionZozor :

  3. #3
    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 : 44
    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
    Voici ce que répond mon compilateur :
    testsdl.c: In function 'main':
    testsdl.c:13: error: 'positionZozor' undeclared (first use in this function)
    testsdl.c:13: error: (Each undeclared identifier is reported only once
    testsdl.c:13: error: for each function it appears in.)
    Comme l'a fait remarquer Dud25, il faudrait déclarer positionZozor...

    Mais ce n'est pas tout, voici ce que je peux dire de ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        SDL_Init(SDL_INIT_VIDEO);
     
        ecran = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE);
        SDL_WM_SetCaption("Chargement d'images en SDL", NULL);
     
        imageDeFond = SDL_LoadBMP("lac_en_montagne.bmp");
    - Aucun test sur les retours des fonctions SDL... Il faut vérifier si tout c'est bien passé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      zozor = SDL_LoadBMP("zozor.bmp");
    - Idem

    - Pas de SDL_Flip tu n'a pas un double tampon. Bien que conseillé, il faudrait passer SDL_DOUBLEBUF à la fonction SDL_SetVideoMode.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
            SDL_WaitEvent(&event);
            switch(event.type)
            {
                case SDL_QUIT:
                    continuer = 0;
            }
        }
    - Toujours tester le retour de SDL_WaitEvent et il est bon d'ajouter le cas par défaut.

    Jc

  4. #4
    Membre actif Avatar de ironzorg
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 288
    Points : 245
    Points
    245
    Par défaut
    Je ne comprends pas pourquoi tu ne fait pas de boucle... Et pourquoi fais tu un flip avant de détecter les évènements ?

    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
    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL/SDL.h>
     
    void pause();
    int main(int argc, char *argv[])
    {
        SDL_Surface *ecran = NULL, *imageDeFond = NULL, *zozor = NULL;
        SDL_Rect positionFond;
        SDL_Rect positionZozor;
     
        bool quit = false;
     
        SDL_Init(SDL_INIT_VIDEO);
     
        ecran = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE, SDL_DOUBLEBUF );
     
        SDL_WM_SetCaption("Chargement d'images en SDL", NULL);
     
        positionFond.x = 0;
        positionFond.y = 0;
        positionZozor.x = 500;// c'est la l'erreur!
        positionZozor.y = 260;
     
        imageDeFond = SDL_LoadBMP("lac_en_montagne.bmp");
        zozor = SDL_LoadBMP("zozor.bmp");
     
        while(quit == false)
        {
              pause();
     
              SDL_BlitSurface(imageDeFond, NULL, ecran, &positionFond);
              SDL_BlitSurface(zozor, NULL, ecran, &positionZozor);
              SDL_Flip(ecran);
        }
     
        SDL_FreeSurface(imageDeFond);
        SDL_FreeSurface(zozor);
        SDL_Quit();
     
        return EXIT_SUCCESS;
    }
     
    void pause()
    {
        SDL_Event event;
     
            SDL_PollEvent(&event);
            switch(event.type)
            {
                case SDL_QUIT:
                    continuer = 0;
            }
    }
    Cela devrai etre mieux ...

  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 : 44
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    void pause()
    {
        SDL_Event event;
     
            SDL_PollEvent(&event);
            switch(event.type)
            {
                case SDL_QUIT:
                    continuer = 0;
            }
    }
    Cela devrai etre mieux ...
    Arg !!! Un SDL_PollEvent sans un test autour !!!!

    Ecrit 100 fois "Je ne ferais plus jamais cela" avec les consonnes en vert et les voyelles en rouge...

    Jc

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 61
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par fearyourself
    Arg !!! Un SDL_PollEvent sans un test autour !!!!

    Ecrit 100 fois "Je ne ferais plus jamais cela" avec les consonnes en vert et les voyelles en rouge...

    Jc
    ah§!!! la pour une fois je n'y suis pour rien
    Il faut aller dire sa a matéo21 ^^lol

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 433
    Points : 240
    Points
    240
    Par défaut
    Préfère la structure suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    while( SDL_PollEvent(&event) ) {
     
    	switch(event.type) {
     
    		/* Gestion de l'évennement... */
     
    	}
    }

Discussions similaires

  1. Problème affichage d'une image
    Par om.rava dans le forum Langage
    Réponses: 3
    Dernier message: 04/12/2005, 09h56
  2. Problème pour afficher une image bmp
    Par homeostasie dans le forum MFC
    Réponses: 6
    Dernier message: 08/05/2005, 18h36
  3. [MFC]Problème pour afficher une image.
    Par Deedier dans le forum MFC
    Réponses: 4
    Dernier message: 25/03/2005, 16h13
  4. Réponses: 13
    Dernier message: 23/12/2004, 18h01
  5. blitter une image
    Par colargol dans le forum DirectX
    Réponses: 2
    Dernier message: 25/10/2002, 15h38

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