Partage
  • Partager sur Facebook
  • Partager sur Twitter

Tuto Mateo@21 Partie 3 Création d'une fenêtre

    19 juillet 2017 à 13:55:47

    if(ecran == NULL) // Si l'allocation 'surface écran' a échoué...
    {
       fprintf(stderr, "ERREUR: %s\n", SDL_GetError());
       exit(EXIT_FAILURE);
    }


    Bonjour à tous les "Zéros"!

    Etant très prévoyant comme le suggère Mateo dans son tuto quand il parle des erreurs pouvant être générées, je me pose la question suivante:

    "Pourquoi ne fait t-on pas le test SDL_GetError pour les autres surfaces autres que la surface 'ecran' (fenêtre principale)?"

    Merci pour votre aide!

    Bien cordialement

    Thierry <°))))><

    PS: Je ne sais pas pour vous, mais ça commence à se corser... (c'est peut-être mon âge) :euh:

    • Partager sur Facebook
    • Partager sur Twitter
      19 juillet 2017 à 14:36:46

      Lu'!

      On devrait. C'est juste que le tutoriel montre des trucs crados par moment.

      • Partager sur Facebook
      • Partager sur Twitter

      Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

        24 juillet 2017 à 12:54:02

        Hello tout le monde!

        Voilà, j'en suis à la partie Traiter l'événement SDL_KEYDOWN / Exercice : diriger Zozor au clavier

        https://openclassrooms.com/courses/apprenez-a-programmer-en-c/la-gestion-des-evenements

        Je viens vers vous pour m'éclaircir sur un mystère que je n'arrive pas à m'expliquer...

        J'ai bien réussi à positionner Zozor au milieu de l'écran avec les coordonnées: x = 299 et y = 193

        Mais, en mettant les coordonnées:

        positionZozor.x = ecran->w / 2 - zozor->w / 2;

        positionZozor.y = ecran->h / 2 - zozor->h / 2;

        après la ligne:

        zozor = SDL_LoadBMP("zozor.bmp"); SDL_SetColorKey(zozor, SDL_SRCCOLORKEY, SDL_MapRGB(zozor->format, 0, 0, 255));

        le compilateur m'envoie un message d'erreur:

        Il en est de même quand je fais un copier coller du code de Matéo.

        Je précise que j'ai bien collé les fichiers .dll dans le projet y compris SDL.dll. J'ai également effectué le rajout de SDL_image.lib dans

        projet / options de génération / options de l'éditeur de lien / librairies à lier(+ajouter)

        Je vous remercie de tout cœur pour votre aide.

        Bien cordialement,

        Thierry

        • Partager sur Facebook
        • Partager sur Twitter
          24 juillet 2017 à 13:00:54

          Le chemin qui est indiqué au niveau de fichier a été édité par toi (pour cacher les éléments sur ton screen) ou c'est vraiment ce qui y est écrit ? Parce que ça paraît pas trop normal. Quand tu reviens en arrière l'erreur doit rester non ?

          • Partager sur Facebook
          • Partager sur Twitter

          Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

            24 juillet 2017 à 15:58:50

            Hello Ksass`Peuk,

            Merci pour ta réaction.

            J'ai juste fait un copier/coller

            #include <stdlib.h>
            #include <stdio.h>
            #include <SDL/SDL.h>
            #include <SDL_image.h>
            
            int main(int argc, char *argv[])
            {
                SDL_Surface *ecran = NULL; // pointeur ecran
                SDL_Surface *zozor = NULL;
                SDL_Rect positionZozor;
                         positionZozor.x = 299;
                         positionZozor.y = 193;
            
                SDL_Event event; // variable événement
                int continuer = 1; // booléen (boucle while)
            
                SDL_Init(SDL_INIT_VIDEO); // appel SDL (moduleVIDEO)
            
                ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE); // paramètres ecran
                SDL_WM_SetCaption("Gestion des événements en SDL", NULL); // titre ecran
                SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
            
                zozor = SDL_LoadBMP("zozor.bmp");
                SDL_SetColorKey(zozor, SDL_SRCCOLORKEY, SDL_MapRGB(zozor->format, 0, 0, 255));
                SDL_BlitSurface(zozor, NULL, ecran, &positionZozor);
            
                SDL_Flip(ecran);
            
                while (continuer) // TANT QUE la variable ne vaut pas 0 (qu'elle vaut 1)
                {
                    SDL_WaitEvent(&event); // traitement d'un événement
            
                    switch(event.type) // type d'événement qui doit se produire
                    {
                        case SDL_QUIT:    // OU quitter en cliquant sur la croix
                            continuer = 0;// sortie du programme
                            break;
            
                        case SDL_KEYDOWN: // OU quitter en appuyant sur une touche
                            switch (event.key.keysym.sym) // liste des touches
                            {
                                case SDLK_ESCAPE: // ou par la touche ECHAP
                                    continuer = 0; // sortie du programme
                                    break;
            
                                case SDLK_SPACE:  // ou par la touche ESPACE
                                    continuer = 0; // sortie du programme
                                    break;
                            }
                            break;
                    }
                }
            
                SDL_FreeSurface(zozor);
                SDL_Quit();
            
                return EXIT_SUCCESS;
            }

            La façon ci-dessus se compile très bien!

             Mais la façon ci-dessous ne se compile pas... (Message d'erreur : "No such file or directory")

            #include <stdlib.h>
            #include <stdio.h>
            #include <SDL/SDL.h>
            #include <SDL_image.h>
            
            
            int main(int argc, char *argv[])
            {
                SDL_Surface *ecran = NULL, *zozor = NULL;
                SDL_Rect positionZozor;
                SDL_Event event;
                int continuer = 1;
            
                SDL_Init(SDL_INIT_VIDEO);
            
                ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE);
                SDL_WM_SetCaption("Gestion des événements en SDL", NULL);
            
                /* Chargement de Zozor */
                zozor = SDL_LoadBMP("zozor.bmp");
                SDL_SetColorKey(zozor, SDL_SRCCOLORKEY, SDL_MapRGB(zozor->format, 0, 0, 255));
            
                /* On centre Zozor à l'écran */
                positionZozor.x = ecran->w / 2 - zozor->w / 2;
                positionZozor.y = ecran->h / 2 - zozor->h / 2;
            
                while (continuer)
                {
                    SDL_WaitEvent(&event);
                    switch(event.type)
                    {
                        case SDL_QUIT:
                            continuer = 0;
                            break;
                        case SDL_KEYDOWN:
                            switch(event.key.keysym.sym)
                            {
                                case SDLK_UP: // Flèche haut
                                    positionZozor.y--;
                                    break;
                                case SDLK_DOWN: // Flèche bas
                                    positionZozor.y++;
                                    break;
                                case SDLK_RIGHT: // Flèche droite
                                    positionZozor.x++;
                                    break;
                                case SDLK_LEFT: // Flèche gauche
                                    positionZozor.x--;
                                    break;
                            }
                            break;
                    }
                
                    /* On efface l'écran */
                    SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
                    /* On place Zozor à sa nouvelle position */
                    SDL_BlitSurface(zozor, NULL, ecran, &positionZozor);
                    /* On met à jour l'affichage */
                    SDL_Flip(ecran);
                }
            
                SDL_FreeSurface(zozor);
                SDL_Quit();
            
                return EXIT_SUCCESS;
            }




            -
            Edité par ThierryRobert4 24 juillet 2017 à 15:59:26

            • Partager sur Facebook
            • Partager sur Twitter
              24 juillet 2017 à 16:17:53

              Nan mais ce que je veux dire, c'est dans ton screen de l'erreur. Tu vois qu'au niveau de la colonne fichier, tu as un chemin ..\..\..\....., et ça c'est pas trop valide comme chemin normalement. C'est pour ça que je te demande si c'est toi qui a viré le nom de fichier, où si c'est vraiment ce qui apparaît. Parce que dans le second cas, ça ressemble à une configuration qui fait n'importe quoi.

              • Partager sur Facebook
              • Partager sur Twitter

              Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

                2 août 2017 à 18:13:56

                Bonjour Ksass Peuk

                Merci pour ton message.

                J'avais effctivement une erreur dans le chemin donné pour trouver le fichier dll pour SDL Image.

                Depuis j'ai réglé le problème.

                J'ai créé un dossier avec toutes les dll a copier dans tout nouveau projet + manips a faire dans la config Projet.

                Merci de m'avoir rendu attentif.

                Cordialement,

                Thierry

                • Partager sur Facebook
                • Partager sur Twitter
                  2 août 2017 à 18:24:11

                  Pas de problème, ciao.

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

                    4 août 2017 à 19:01:43

                    ThierryRobert4 a écrit:

                    Hello Ksass`Peuk,

                    Merci pour ta réaction.

                    J'ai juste fait un copier/coller

                    #include <stdlib.h>
                    #include <stdio.h>
                    #include <SDL/SDL.h>
                    #include <SDL_image.h>
                    
                    int main(int argc, char *argv[])
                    {
                        SDL_Surface *ecran = NULL; // pointeur ecran
                        SDL_Surface *zozor = NULL;
                        SDL_Rect positionZozor;
                                 positionZozor.x = 299;
                                 positionZozor.y = 193;
                    
                        SDL_Event event; // variable événement
                        int continuer = 1; // booléen (boucle while)
                    
                        SDL_Init(SDL_INIT_VIDEO); // appel SDL (moduleVIDEO)
                    
                        ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE); // paramètres ecran
                        SDL_WM_SetCaption("Gestion des événements en SDL", NULL); // titre ecran
                        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
                    
                        zozor = SDL_LoadBMP("zozor.bmp");
                        SDL_SetColorKey(zozor, SDL_SRCCOLORKEY, SDL_MapRGB(zozor->format, 0, 0, 255));
                        SDL_BlitSurface(zozor, NULL, ecran, &positionZozor);
                    
                        SDL_Flip(ecran);
                    
                        while (continuer) // TANT QUE la variable ne vaut pas 0 (qu'elle vaut 1)
                        {
                            SDL_WaitEvent(&event); // traitement d'un événement
                    
                            switch(event.type) // type d'événement qui doit se produire
                            {
                                case SDL_QUIT:    // OU quitter en cliquant sur la croix
                                    continuer = 0;// sortie du programme
                                    break;
                    
                                case SDL_KEYDOWN: // OU quitter en appuyant sur une touche
                                    switch (event.key.keysym.sym) // liste des touches
                                    {
                                        case SDLK_ESCAPE: // ou par la touche ECHAP
                                            continuer = 0; // sortie du programme
                                            break;
                    
                                        case SDLK_SPACE:  // ou par la touche ESPACE
                                            continuer = 0; // sortie du programme
                                            break;
                                    }
                                    break;
                            }
                        }
                    
                        SDL_FreeSurface(zozor);
                        SDL_Quit();
                    
                        return EXIT_SUCCESS;
                    }

                    La façon ci-dessus se compile très bien!

                     Mais la façon ci-dessous ne se compile pas... (Message d'erreur : "No such file or directory")

                    #include <stdlib.h>
                    #include <stdio.h>
                    #include <SDL/SDL.h>
                    #include <SDL_image.h>
                    
                    
                    int main(int argc, char *argv[])
                    {
                        SDL_Surface *ecran = NULL, *zozor = NULL;
                        SDL_Rect positionZozor;
                        SDL_Event event;
                        int continuer = 1;
                    
                        SDL_Init(SDL_INIT_VIDEO);
                    
                        ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE);
                        SDL_WM_SetCaption("Gestion des événements en SDL", NULL);
                    
                        /* Chargement de Zozor */
                        zozor = SDL_LoadBMP("zozor.bmp");
                        SDL_SetColorKey(zozor, SDL_SRCCOLORKEY, SDL_MapRGB(zozor->format, 0, 0, 255));
                    
                        /* On centre Zozor à l'écran */
                        positionZozor.x = ecran->w / 2 - zozor->w / 2;
                        positionZozor.y = ecran->h / 2 - zozor->h / 2;
                    
                        while (continuer)
                        {
                            SDL_WaitEvent(&event);
                            switch(event.type)
                            {
                                case SDL_QUIT:
                                    continuer = 0;
                                    break;
                                case SDL_KEYDOWN:
                                    switch(event.key.keysym.sym)
                                    {
                                        case SDLK_UP: // Flèche haut
                                            positionZozor.y--;
                                            break;
                                        case SDLK_DOWN: // Flèche bas
                                            positionZozor.y++;
                                            break;
                                        case SDLK_RIGHT: // Flèche droite
                                            positionZozor.x++;
                                            break;
                                        case SDLK_LEFT: // Flèche gauche
                                            positionZozor.x--;
                                            break;
                                    }
                                    break;
                            }
                        
                            /* On efface l'écran */
                            SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
                            /* On place Zozor à sa nouvelle position */
                            SDL_BlitSurface(zozor, NULL, ecran, &positionZozor);
                            /* On met à jour l'affichage */
                            SDL_Flip(ecran);
                        }
                    
                        SDL_FreeSurface(zozor);
                        SDL_Quit();
                    
                        return EXIT_SUCCESS;
                    }




                    -
                    Edité par ThierryRobert4 24 juillet 2017 à 15:59:26

                    je te consseille de marquer a la place de

                    #include <stdlib.h>
                    #include <stdio.h>
                    #include <SDL/SDL.h>
                    #include <SDL_image.h>

                    de faire plutot ça :   (même si pour moi c'est l'inversse mais j'ai vu des cas comme toi)

                    #include <stdlib.h>
                    #include <stdio.h>
                    #include <SDL/SDL.h>
                    #include <SDL/SDL_image.h>

                    si ça t'a aidé j'en suis heurreux





                    • Partager sur Facebook
                    • Partager sur Twitter
                      4 août 2017 à 19:05:56

                      @Romar1/Romain : Salut, le problème est déjà résolu, mais en plus tu donnes une solution hasardeuse. On ne donne pas de solutions comme ça au hasard, « peut-être que ça va marcher ».

                      • Partager sur Facebook
                      • Partager sur Twitter
                      Tutoriel Ruby - Bon tutoriel C - Tutoriel SDL 2 - Python avancé - Faîtes un zeste, devenez des zesteurs
                        4 août 2017 à 19:27:23

                        yo@n97one : ok, ok je n'avais pas très bien compris que le probleme avait était resolus mais bon c'est pas une soluce hasardeuse

                        car ça marche, de plus je n'ai nullement dit : peut être que ca va marcher, j'ai donné une solution qui pour tout les cas que j'ai rencontrés on fonctionner !!

                        mais bon,

                        Byebye

                                                      -Romar1

                        PS: je veut pas être méchant je rectifie juste...

                        -
                        Edité par Chikoulet 4 août 2017 à 19:29:02

                        • Partager sur Facebook
                        • Partager sur Twitter
                          4 août 2017 à 19:36:26

                          @Romar1/Romain : non, ça ne marche pas forcément. Sais-tu pourquoi on a l’erreur « No such file or directory ». Sais-tu comment on indique au compilateur où chercher les fichiers d’en-têtes ? Ce sont les réponses à ces questions qui permettent de résoudre ce type de problème. Sinon, j’aurais pu lui dire, essaie SDL/SDL/SDL/SDL/SDL/SDL_image.h, et oui, ce dernier truc peut marcher si le fichier SDL_image.h a été placé dans un dossier SDL/SDL/SDL/SDL/SDL/ et qu’on a indiqué au compilateur de chercher les fichiers d’en-têtes dans le dossier où est placé le premier dossier SDL.</sdl>

                          -
                          Edité par yo@n97one 4 août 2017 à 19:37:28

                          • Partager sur Facebook
                          • Partager sur Twitter
                          Tutoriel Ruby - Bon tutoriel C - Tutoriel SDL 2 - Python avancé - Faîtes un zeste, devenez des zesteurs
                            5 août 2017 à 14:58:00

                            .

                            -
                            Edité par Chikoulet 22 février 2019 à 23:52:26

                            • Partager sur Facebook
                            • Partager sur Twitter
                              9 février 2019 à 13:30:34

                              jai un message derreur lors de la configuration de mon projet sdl

                              the path you entered seems valid,but the wizard can't locate

                              the include directory

                              this wizard cannot continue

                              • Partager sur Facebook
                              • Partager sur Twitter

                              Tuto Mateo@21 Partie 3 Création d'une fenêtre

                              × 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