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 :

Tuto, les premiers pas en SDL


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 Tuto, les premiers pas en SDL
    Bonjour,

    J'ai suivit le tuto sur la première application en SDL, et j'ai une erreur que je n'arrive pas à voir (le debugger ne m'affiche aucune erreur, mais la fenetre s'ouvre et se referme toute seule).

    Mon erreur dois surement venir de ma fonction de blitage ou bien du chargement des images, voila mon 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
    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL/SDL.h>
    #include <SDL/SDL_image.h>
     
    SDL_Surface *chargement_image(char cheminImage[50]);
    void blitSurface(int x, int y, SDL_Surface *source, SDL_Surface *destination);
    void pause();
     
    int main(int argc, char *argv[])
    {
        //Les attributs de notre écran :
        const int ECRAN_LARGEUR = 640;
        const int ECRAN_HAUTEUR = 480;
        const int ECRAN_COULEUR = 32;
        SDL_Surface *ecran = NULL, *font = NULL, *mur = NULL;
        SDL_Init(SDL_INIT_VIDEO); // Initialisation de la SDL
     
        SDL_SetVideoMode(ECRAN_LARGEUR, ECRAN_HAUTEUR, ECRAN_COULEUR, SDL_HWSURFACE); // Ouverture de la fenêtre
        SDL_WM_SetCaption("Reprise de la SDL !", NULL);
     
        //Chargement des images
        font = chargement_image("lac_en_montagne.bmp");
        //On blit le font
        blitSurface(0,0,font,ecran);
        mur = chargement_image("mur.jpg");
        //On blit le mur
        blitSurface(100,100,mur,ecran);
     
        SDL_Flip(ecran);
     
        pause();
     
        SDL_FreeSurface(font);
        SDL_FreeSurface(mur);
        SDL_Quit(); // Arrêt de la SDL
        return EXIT_SUCCESS; // Fermeture du programme
    }
     
    SDL_Surface *chargement_image(char cheminImage[50])
    {
        //Surface qui nous servira à charger l'image
        SDL_Surface *imageTemporaire = NULL;
     
        //L'image de la fin qui sera optimisée
        SDL_Surface *imageOptimisee = NULL;
     
        //Chargement de l'image
        imageTemporaire = IMG_Load(cheminImage);
     
        //Si le chargement s'est bien passé
        if(imageTemporaire != NULL)
        {
             //On créer l'image optimisé
             imageOptimisee = SDL_DisplayFormat(imageTemporaire);
     
             //On libère l'image temporaire
             SDL_FreeSurface(imageTemporaire);
        }
     
        //On retourne l'image optimisée
        return imageOptimisee;
    }
     
    void blitSurface(int x, int y, SDL_Surface *source, SDL_Surface *destination)
    {
            SDL_Rect position;
     
            position.x = x;
            position.y = y;
     
            //On Blit !
            SDL_BlitSurface(source, NULL, destination, &position);
    }
     
    void pause()
    {
        int continuer = 1;
        SDL_Event event;
        while(continuer)
        {
              SDL_WaitEvent(&event);
              switch(event.type)
              {
                    case SDL_QUIT:
                        continuer = 0;
              }
        }
    }
    Voila, donc comme je l'ai dis, la fenetre s'ouvre et se ferme à la vitesse de l'éclair :p

    A+

  2. #2
    Rédacteur

    Avatar de loka
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    2 672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 672
    Points : 5 509
    Points
    5 509
    Par défaut
    Il manque les tests pour le chargement des images.

    Changes déjà ça et tu sauras peut être plus d'où vient ton erreur...

  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
    Merci de votre réponse.

    Heu sans passer pour un débile, le test de chargement des images je l'ai bien fais non ?
    je vien de comparer mon code au votre, et je ne vois pas ce que j'ai oublié :s

    A+

  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 : 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 Soward
    Merci de votre réponse.

    Heu sans passer pour un débile, le test de chargement des images je l'ai bien fais non ?
    je vien de comparer mon code au votre, et je ne vois pas ce que j'ai oublié :s

    A+
    Plus ou moins tous les tests sur les retours des fonctions. Quand je regarde le code de loka, je vois ceci :

    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
    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL/SDL.h>
     
    int main( int argc, char *argv[ ] )
    {
        SDL_Surface *screen;
        if( SDL_Init( SDL_INIT_VIDEO ) == -1 )
        {
            printf( "Can't init SDL:  %s\n", SDL_GetError( ) );
            return EXIT_FAILURE;
        }
     
        atexit( SDL_Quit ); 
        screen = SDL_SetVideoMode( 640, 480, 16, SDL_HWSURFACE );
     
        if( screen == NULL )
        {
            printf( "Can't set video mode: %s\n", SDL_GetError( ) );
            return EXIT_FAILURE;
        }   
     
        SDL_Delay( 3000 );
     
        return EXIT_SUCCESS;
    }
    Ce n'est pas exactement la même chose que ce que je vois chez toi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        SDL_Init(SDL_INIT_VIDEO); // Initialisation de la SDL
     
        SDL_SetVideoMode(ECRAN_LARGEUR, ECRAN_HAUTEUR, ECRAN_COULEUR, SDL_HWSURFACE); // Ouverture de la fenêtre
    Et là, on se dit, la fonction SDL_SetVideoMode retourne un pointeur vers la surface écran qu'on va utiliser dans toutes les fonctions SDL_BlitSurface, SDL_UpdateRect (pas SDL_Flip vu qu'on est pas en SDL_DOUBLEBUF)...

    Du coup, ta variable ecran reste à NULL...

    Jc

  5. #5
    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 oui merci, j'ai pris l'habitude de ne pas les mettres ^^

    J'ai trouvé mon erreur, je n'avais pas mis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ecran = SDL_SetVideoMode(ECRAN_LARGEUR, ECRAN_HAUTEUR, ECRAN_COULEUR, SDL_HWSURFACE); // Ouverture de la fenêtre
    Je n'avais pas mis le ecran = devant !

    Sa marche mais une dernière chose, mon mur ne se blit pas.
    Le font (lac_en_montagne) est bien blitter mais pas mon mur :s (pourtant j'ai bien utilisé IMG_Load)

    A+

  6. #6
    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
    Ajoute tous les tests sur les fonctions (tu ne testes pas si mur==NULL par exemple) et ajoute un test pour SDL_WaitEvent aussi....

    Jc

  7. #7
    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
    Merci de votre réponse.

    L'image "mur" n'existe pas (je viens de faire la condition), par contre pas de problème avec SDL_WaitEvent

    Le faite que "mur" ne marche pas, c'est parce que c'est une image en jpg ?

    A+

  8. #8
    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
    Pardonner moi du double post, mais c'est assez bizard.

    Le chargement d'image marche pour les gif et les bmp, mais ne marche pas pour les jpg et png.

    Il me met que ma photo n'a pas été trouvé !

    A+

Discussions similaires

  1. Réponses: 4
    Dernier message: 06/10/2010, 20h47
  2. [VBA] VBA, XI R2, Les premiers pas ?
    Par PtitGénie dans le forum SDK
    Réponses: 3
    Dernier message: 07/08/2009, 15h38
  3. [Liferay] Faire les premiers pas
    Par aminbou dans le forum Portails
    Réponses: 4
    Dernier message: 28/07/2009, 08h29
  4. [RedHat] les premiers pas
    Par hic73 dans le forum RedHat / CentOS / Fedora
    Réponses: 19
    Dernier message: 19/12/2007, 10h41
  5. [VBA]Macro Excel : les premiers pas ?
    Par epfyffer dans le forum SDK
    Réponses: 3
    Dernier message: 28/03/2007, 15h12

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