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 tableau de SDL_Surface


Sujet :

SDL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 42
    Points : 29
    Points
    29
    Par défaut Problème tableau de SDL_Surface
    Bonsoir a tous

    alors voila j'essaye de me remettre un peu a la SDL mais j'ai du mal ><

    j'essaye de jouer avec un tableau de SDL_Surface mais son passage en paramétre me pose problème :s

    voici donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // déclaration
        SDL_Surface *surfaces[10];
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // appel de la procédure
    SDLinit(*surfaces);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // ma procédure en bois
    void SDLinit(SDL_Surface ** tab_surface);
    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
    void SDLinit(SDL_Surface ** tab_surface) {
     
        // initialiser le mode video
        if ( SDL_Init( SDL_INIT_VIDEO ) < 0 ) // la fonction SDL_Init retourne un entier : 0=ok, inf à 0=erreur
        {
            printf( "Erreur SDL_Init : %s\n", SDL_GetError() );
        }
        // s'assurer que la librairie soit nettoyée correctement lorsqu'on va sortir du prog
        atexit(SDL_Quit);
     
        // nommer la fenêtre (barre de titre)
        SDL_WM_SetCaption("Test", NULL);
     
        // creer une fenetre et démarrage du mode vidéo (on sort du mode console)
        tab_surface[0] = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_HWSURFACE|SDL_DOUBLEBUF);
     
        if (!tab_surface[0]) // si la création s'est mal déroulée
        {
            printf("Erreur SDL_SetVideoMode %s x %s X %s video: %s\n", SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP,SDL_GetError());
        }
     
        // remplir la surface de l'écran avec la couleur spécifiée (ici blanc)
        SDL_FillRect(tab_surface[0], 0, SDL_MapRGB(tab_surface[0]->format, 255, 255, 255));
     
    }

    j'obtiens donc comme erreur :
    \main.cpp|26|error: cannot convert `SDL_Surface*' to `SDL_Surface**' for argument `1' to `void SDLinit(SDL_Surface**)'|


    voila donc si vous pouviez me donner la raison du pb, vous ne me reverrez plus pour sa :p


    d'avance merci

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Ce n'est pas une réponse parfaite ( enfin je ne pense pas ) mais je pense que c'est une solution.

    Pour ta déclaration fait comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    // Pointeur sur des pointeur de surface ( revient à un tableau de Surface* )
    SDL_Surface** surface
     
    // Initialisation du pointeurs
    surface = malloc ( 10 * sizeof(SDL_Surface*));
     
     
    // Appel de la fonction d'init :
    SDLinit(surfaces)
    Après je crois que cela va être bon...

    Par contre c'est la première fois que je découvre l'utilisation d'un tableau pour regrouper les surfaces.
    J'ai plus l'habitude de faire une surface ecran, une surface texture ...
    ( enfin c'est un choix )
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Prends plutot std::vector ; je sais que certains vont raler et dire que c'est compliqué pour les débutant mais pas tant que cela.
    Tu as juste à connaitre les méthodes comme push_back , erase et les itérateurs sans trop te soucier pourquoi.

    Donc pour déclarer un vector de SDL_Surface il suffit de déclarer std::vector<SDL_Surface> d'en ajouter une avec push_back..

  4. #4
    Membre expérimenté
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Points : 1 452
    Points
    1 452
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // appel de la procédure
    SDLinit(*surfaces);
    Tu passe en paramètres une surface.

    Pour passer le tableau, il suffit juste de faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // appel de la procédure
    SDLinit(surfaces);
    Et plus d'erreurs!

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 42
    Points : 29
    Points
    29
    Par défaut
    bonjour

    désolé je n'ai pas pu venir voir vos réponses plus tot

    merci de vous etre interessé a mon cas je test sa dans la journée

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 42
    Points : 29
    Points
    29
    Par défaut
    j'ai essayé la methode de coyotte et j'ai droit a cette erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     no match for 'operator[]' in 'tab_surface[0]'|

  7. #7
    Membre expérimenté
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Points : 1 452
    Points
    1 452
    Par défaut
    Salut

    La fonction est bien la même?

    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
    void SDLinit(SDL_Surface ** tab_surface) {
     
        // initialiser le mode video
        if ( SDL_Init( SDL_INIT_VIDEO ) < 0 ) // la fonction SDL_Init retourne un entier : 0=ok, inf à 0=erreur
        {
            printf( "Erreur SDL_Init : %s\n", SDL_GetError() );
        }
        // s'assurer que la librairie soit nettoyée correctement lorsqu'on va sortir du prog
        atexit(SDL_Quit);
     
        // nommer la fenêtre (barre de titre)
        SDL_WM_SetCaption("Test", NULL);
     
        // creer une fenetre et démarrage du mode vidéo (on sort du mode console)
        tab_surface[0] = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_HWSURFACE|SDL_DOUBLEBUF);
     
        if (!tab_surface[0]) // si la création s'est mal déroulée
        {
            printf("Erreur SDL_SetVideoMode %s x %s X %s video: %s\n", SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP,SDL_GetError());
        }
     
        // remplir la surface de l'écran avec la couleur spécifiée (ici blanc)
        SDL_FillRect(tab_surface[0], 0, SDL_MapRGB(tab_surface[0]->format, 255, 255, 255));
     
    }
    Si oui, à quelle ligne est l'erreur?

    Au pire, donne un morceau de code compilable reproduisant l'erreur.

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 42
    Points : 29
    Points
    29
    Par défaut
    en fait erreur de ma part j'obtien CETTE erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    |8|undefined reference to `_SDL_Init'|


    dont voici 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
    int main() {
     
        // variables
        SDL_Surface *surfaces[10];
     
        // initialisation pour les chiffres aléatoires
        srand(time(NULL));
     
        // initialisation
        SDLinit(surfaces);
     
        cout << "Hello world!" << endl;
        return 0;
     
    }
    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
    void SDLinit(SDL_Surface ** tab_surface) {
     
        // initialiser le mode video
        if ( SDL_Init( SDL_INIT_VIDEO ) < 0 ) // la fonction SDL_Init retourne un entier : 0=ok, inf à 0=erreur
        {
            printf( "Erreur SDL_Init : %s\n", SDL_GetError() );
        }
        // s'assurer que la librairie soit nettoyée correctement lorsqu'on va sortir du prog
        atexit(SDL_Quit);
     
        // nommer la fenêtre (barre de titre)
        SDL_WM_SetCaption("Test", NULL);
     
        // creer une fenetre et démarrage du mode vidéo (on sort du mode console)
        tab_surface[0] = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_HWSURFACE|SDL_DOUBLEBUF);
     
        if (!tab_surface[0]) // si la création s'est mal déroulée
        {
            printf("Erreur SDL_SetVideoMode %s x %s X %s video: %s\n", SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP,SDL_GetError());
        }
     
        // remplir la surface de l'écran avec la couleur spécifiée (ici blanc)
        SDL_FillRect(tab_surface[0], 0, SDL_MapRGB(tab_surface[0]->format, 255, 255, 255));
     
    }

  9. #9
    Membre expérimenté
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Points : 1 452
    Points
    1 452
    Par défaut
    Salut.

    Dans ce cas la fonction qui pose problème c'est SDL_Init, avec un under-score au milieu, c'est la fonction de la bibliothèque SDL. Ca veut sûrement dire que SDL n'est pas linkée à ton programme.

    Si tu veux des tutos expliquant comment "linker" SDL, tu en trouveras sur developpez.com (ça dépend de quoi tu utilises, windows-linux, visual-mingw, ..)

  10. #10
    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
    tu peux retrouver les explication pour la plupart ici :

    http://loka.developpez.com/tutoriel/sdl/installation/

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 42
    Points : 29
    Points
    29
    Par défaut
    ok je vais aller y jeter un oeil

    merci

Discussions similaires

  1. [Tableaux] Probléme Tableau / Menu
    Par carnage_59 dans le forum Langage
    Réponses: 7
    Dernier message: 13/10/2005, 13h34
  2. Problème tableau pour une requête
    Par LE NEINDRE dans le forum Langage
    Réponses: 2
    Dernier message: 07/10/2005, 20h21
  3. Problème Tableau Sous DW
    Par Lorik dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 04/10/2005, 11h55
  4. [perl]Problème tableau indexé
    Par LE NEINDRE dans le forum Langage
    Réponses: 8
    Dernier message: 25/08/2005, 21h24
  5. [CR8] Problème tableau sur plusieurs pages???
    Par christophe28 dans le forum SAP Crystal Reports
    Réponses: 5
    Dernier message: 02/11/2004, 15h46

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