Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C][SDL] SDL mal installé ?

Ou cerveau mal installé ?

    29 avril 2006 à 10:50:15

    Bonjour à tous. Pour mon jeu, j'essaye de faire un éditeur de niveau trés proche de celui de mario sokoban du SdZ. Cependant, voici ce qui ressort à la compilation:
    lvledit.c:40: error: `SDL_KP1' undeclared (first use in this function)
    [Autres ereurs du même genre avec SDL_KP2...]
    lvledit.c:13: warning: enumeration value `SDLK_UNKNOWN' not handled in switch.
    [Ensuite il me sort environ une bonne cinquantaine d'erreur comme celle-là sauf qu'il remplace SDL_UNKNOWN par SDLK_FIRST, SDL_BACKSPACE...
    . Je ne comprend pas trop de quoi ça peut venir. Peut être d'une SDL mal installée ? Avez vous une idée sur la question ?
    Voici le code:
    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL/SDL.h>
    #include "lvledit.h"
    #include "affichage.h"
    #include "fichiers.h"

    void editeur(SDL_Surface* ecran)
    {
            //Creation des variables
        SDL_Surface *arbre = NULL, *rocher = NULL;
            SDL_Surface *imageDeFond = NULL;
        SDL_Rect position;
        SDL_Event event;
            int carte[48][48] = {0};
            int continuer=1;
            int currentobjet = 1; //1=rocher 2=arbre 0=vide
           
        // Chargement des objets et du niveau
        arbre = SDL_LoadBMP("arbre.bmp");
        rocher = SDL_LoadBMP("rocher.bmp");   
           
            //affichage du fond
            imageDeFond=make_background(ecran);
           
            //Boucle principale
            while(continuer) {
                    switch(event.type) {
                            case SDL_KEYDOWN:
                                    switch(event.key.keysym.sym) {
                                            case SDLK_s:
                                                    //Ici on sauvgarde la map
                                                    printf("Je sauvgarde la map");
                                                    sauvcarte(carte);
                                                    break;
                                            case SDLK_a:
                                                    //Ici on quitte sans sauvgarder
                                                    exit(EXIT_FAILURE);
                                                    break;
                                            case SDL_KP1:
                                                    currentobjet=1;
                                                    break;
                                           
                                            case SDL_KP2:
                                                    currentobjet=2;
                                                    break;
                                    }
                                    break;
                           
                            case SDL_MOUSEBUTTONUP:
                                    if (event.button.button == SDL_BUTTON_LEFT) { //Bouton gauche on
                                            //ajoute le brush courant
                                            printf("Je clique avec le bouton gauche");
                                            carte[event.button.x / 20][event.button.y / 20] = currentobjet;
                                    }
                                    else if (event.button.button == SDL_BUTTON_RIGHT) { //On supprim
                                            //-me le brush selectionner
                                            printf("Je clique avec le bouton droit");
                                            carte[event.button.x / 20][event.button.y / 20] = 0;
                                    }
                                    break;
                    }
            }
            //Liberation des images
            SDL_FreeSurface(imageDeFond);
            SDL_FreeSurface(arbre);
            SDL_FreeSurface(rocher);
    }
    • Partager sur Facebook
    • Partager sur Twitter
      29 avril 2006 à 10:56:09

      Alors:
      SDL_KP1 n'existe pas, c'est SDLK_KP1.
      Sinon, met un default:break; à la fin de tes switch afin d'envisager toutes les possibilités.

      Normalement, ça ira ;)
      • Partager sur Facebook
      • Partager sur Twitter
        29 avril 2006 à 11:07:40

        Merci. Ca résoud beaucoup de problèmes d'un coup.
        Mais il me reste 2 "warning":
        lvledit.c:15: warning: missing braces around initializer
        lvledit.c:15: warning: (near initialization for `carte[0]')

        Voici le nouveau code:
        #include <stdlib.h>
        #include <stdio.h>
        #include <SDL/SDL.h>
        #include "lvledit.h"
        #include "affichage.h"
        #include "fichiers.h"

        void editeur(SDL_Surface* ecran)
        {
                //Creation des variables
            SDL_Surface *arbre = NULL, *rocher = NULL;
                SDL_Surface *imageDeFond = NULL;
            SDL_Rect position;
            SDL_Event event;
                int carte[48][48] = {0};
                int continuer=1;
                int i = 0;
                int j = 0;
                int currentobjet = 1; //1=rocher 2=arbre 0=vide
               
            // Chargement des objets et du niveau
            arbre = SDL_LoadBMP("arbre.bmp");
            rocher = SDL_LoadBMP("rocher.bmp");   
               
                //affichage du fond
                imageDeFond=make_background(ecran);
               
                //Boucle principale
                while(continuer) {
                        switch(event.type) {
                                case SDL_KEYDOWN:
                                        switch(event.key.keysym.sym) {
                                                case SDLK_s:
                                                        //Ici on sauvgarde la map
                                                        printf("Je sauvgarde la map");
                                                        sauvcarte(carte);
                                                        break;
                                                case SDLK_a:
                                                        //Ici on quitte sans sauvgarder
                                                        exit(EXIT_FAILURE);
                                                        break;
                                                case SDLK_KP1:
                                                        currentobjet=1;
                                                        break;
                                               
                                                case SDLK_KP2:
                                                        currentobjet=2;
                                                        break;
                                                default:break;
                                        }
                                        break;
                                                       
                                case SDL_MOUSEBUTTONUP:
                                        if (event.button.button == SDL_BUTTON_LEFT) { //Bouton gauche on
                                                //ajoute le brush courant
                                                printf("Je clique avec le bouton gauche");
                                                carte[event.button.x / 20][event.button.y / 20] = currentobjet;
                                               
                                        }
                                        else if (event.button.button == SDL_BUTTON_RIGHT) { //On supprim
                                                //-me le brush selectionner
                                                printf("Je clique avec le bouton droit");
                                                carte[event.button.x / 20][event.button.y / 20] = 0;
                                        }
                                        break;
                                default:break;

                        }
                        for (i = 0 ; i < 48 ; i++)
                {
                    for (j = 0 ; j < 48 ; j++)
                    {
                        position.x = i * 20;
                        position.y = j * 20;

                        switch(carte[i][j])
                        {
                            case 1:
                                SDL_BlitSurface(rocher, NULL, ecran, &position);
                                break;
                            case 2:
                                SDL_BlitSurface(arbre, NULL, ecran, &position);
                                break;
                                                default:break;
                        }
                    }
                }

                // Mise à jour de l'écran
                SDL_Flip(ecran);
                }
                //Liberation des images
                SDL_FreeSurface(imageDeFond);
                SDL_FreeSurface(arbre);
                SDL_FreeSurface(rocher);
        }

        Vous remarquerez le j'ai ajouter 2 boucles for pour afficher les objets déjà placés à l'écran (ça ne marche pas : rien ne s'affiche lorsque je clique mais ce n'est pas le sujet du topic).
        • Partager sur Facebook
        • Partager sur Twitter
          29 avril 2006 à 11:15:59

          L'erreur dit qu'il manque des crochets à la ligne 15, mais

          int carte[48][48] = {0};

          me paraît correct...
          • Partager sur Facebook
          • Partager sur Twitter
            29 avril 2006 à 11:57:56

            Je ne comprend pas non plus.
            Plus personne n'a d'idées ?
            • Partager sur Facebook
            • Partager sur Twitter

            [C][SDL] SDL mal installé ?

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown