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 :

Programme éclair (SDL-POO)


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    65
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 65
    Par défaut Programme éclair (SDL-POO)
    Salut, j'ai un petit problème avec mon programme car il s'ouvre et se ferme en un éclair. Pour le moment j'essais de combiner SDL et POO, donc de n'afficher qu'une image:

    main.cpp:
    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
    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>
    #include <SDL/SDL.h>
    #include <SDL/SDL_image.h>
    #include "Personnage.h"
     
     
    int main(int argc, char *argv[])
    {
        //---------------------------------------------------------------------
        Personnage *perso;
        SDL_Surface *ecran = NULL;
        SDL_Rect positionFond;
        SDL_Event event;
        bool continuer = true;
     
        positionFond.x = 0;
        positionFond.y = 0;
     
        SDL_Init(SDL_INIT_VIDEO);
        SDL_WM_SetIcon(IMG_Load("perso.png"), NULL);
        ecran = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
        SDL_WM_SetCaption("TeeworldsLike", NULL);
        //---------------------------------------------------------------------
     
        perso->afficherPerso(ecran);
        SDL_Flip(ecran);
     
        while (continuer)
        {
            SDL_WaitEvent(&event);
            switch(event.type)
            {
                case SDL_QUIT:
                    continuer = false;
            }
     
        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
        perso->afficherPerso(ecran);
        SDL_Flip(ecran);
        }
     
        SDL_FreeSurface(ecran);
        SDL_Quit();
        return EXIT_SUCCESS;
    }
    Personnage.h:
    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
     
    #ifndef DEF_PERSONNAGE
    #define DEF_PERSONNAGE
    #include <SDL/SDL.h>
    #include <SDL/SDL_image.h>
     
    class Personnage
    {
        public:
        Personnage();
        void setCoordAffiche(int x, int y);
        void afficherPerso(SDL_Surface* ecran);
     
        private:
        SDL_Surface* imagePerso;
        SDL_Rect positionPerso;
    };
     
     
    #endif
    Personnage.cpp:
    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
    #include "Personnage.h"
     
    Personnage::Personnage()
    {
       imagePerso = new SDL_Surface;
       imagePerso = IMG_Load("perso.png");
       positionPerso.x = 500;
       positionPerso.y = 500;
    }
     
    void Personnage::setCoordAffiche(int x, int y)
    {
       positionPerso.x = x;
       positionPerso.y = y;
    }
     
    void Personnage::afficherPerso(SDL_Surface* ecran)
    {
       SDL_BlitSurface(imagePerso, NULL, ecran, &positionPerso);
    }
    Aprés quelques test, je conclu que le problème vient de ma fonction afficherPerso. Le programme ne me donne aucunes erreurs.

    Je ne vois donc pas d'ou vient le problème; merci de m'aider.

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 962
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 962
    Par défaut
    Joe,

    Hum.

    Je ne vois pas d'initialisation de perso entre les lignes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ...
        Personnage *perso;
    ...    
        perso->afficherPerso(ecran);
    ...

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    65
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 65
    Par défaut
    D'initialisation?
    Désolé j'ai bien peur de ne pas comprendre. Je cré un personnage et tout s'initialise dans le constructeur non?

  4. #4
    Membre Expert
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 940
    Par défaut
    Salut,

    Peut-être que tu n'as pas indiqué tout ton code, mais ce que droggo voulait dire, c'est qu'il manque un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perso = new Personnage();
    dans ton code.

    J'avais essayé une ou deux fois la SDL, mais c'était il y a un moment, alors je n'ai pas idée de suite de ce qui peux poser problème. Ca aurait pu être un truc par rapport au double buffer/swap de buffer, mais je n'en suis pas sûr. Ou alors rajouter un 'case default:' dans le switch sur les evénement SDL. Mais je n'en suis pas certain du tout.

  5. #5
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    65
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 65
    Par défaut
    Effectivement, je déclarai perso en temps que pointeur donc j'avais oublié cette ligne xD.
    Merci bien

  6. #6
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Apprends à utiliser un débogueur...
    Tu t'es sûrement pris une erreur de segmentation, tout simplement.

  7. #7
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut
    Ce serait également une bonne chose de vérifier que les fonctions de la SDL se sont bien passées (SDL_Init et SDL_SetVideoMode en particulier). Pour cela, il faut tester les valeurs qu'elles retournent.

Discussions similaires

  1. Probleme programme snake sdl
    Par negers01 dans le forum SDL
    Réponses: 2
    Dernier message: 20/11/2009, 11h40
  2. lag programme C++ & SDL
    Par goffle dans le forum SDL
    Réponses: 10
    Dernier message: 28/01/2009, 09h27
  3. Réponses: 4
    Dernier message: 08/01/2009, 11h56
  4. programmer avec SDL et QT
    Par nightwar dans le forum SDL
    Réponses: 13
    Dernier message: 24/06/2008, 13h06
  5. Programmation graphique ... SDL ??
    Par Franck.H dans le forum C
    Réponses: 9
    Dernier message: 29/04/2004, 20h51

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