Partage
  • Partager sur Facebook
  • Partager sur Twitter

SDL affichage icone

    8 février 2020 à 22:38:04

    Bonjour,

    Je vous contacts parce-que j'apprends actuellement à utiliser la bibliothèque SDL, mais je ne parviens pas à changer l'icône de la fenêtre, j'ai lu plusieurs sujets indiquant le même problème mais aucune solution ne fonctionne.

    Je suis le cours "Apprenez à programmer en C" de Mathieu Nebra. Même en copiant son code, rien n'y fait, l'icône n’apparaît pas.

    Est-ce que vous auriez une solution svp? Sachant que je programmes avec gedit et la console sous Ubuntu.

    Merci d'avance !

    Voici mon code :

    #include <SDL/SDL.h>
    
    void pause();
    
    int main(int argc, char *argv[])
    {
        SDL_Surface *ecran = NULL, *imageDeFond = NULL;
        SDL_Rect positionFond;
    
        positionFond.x = 0;
        positionFond.y = 0;
    
        SDL_Init(SDL_INIT_VIDEO);
    
        /* Chargement de l'icône AVANT SDL_SetVideoMode */
        SDL_WM_SetIcon(SDL_LoadBMP("sdl_icone.bmp"), NULL);
    
        ecran = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE);
        SDL_WM_SetCaption("Chargement d'images en SDL", NULL);
    
        imageDeFond = SDL_LoadBMP("lac_en_montagne.bmp");
        SDL_BlitSurface(imageDeFond, NULL, ecran, &positionFond);
    
        SDL_Flip(ecran);
        pause();
    
        SDL_FreeSurface(imageDeFond);
        SDL_Quit();
    
        return EXIT_SUCCESS;
    }
    
    void pause(){
        int continuer = 1;
        SDL_Event event;
        
        while(continuer){
             SDL_WaitEvent(&event);
             switch(event.type){
                  case SDL_QUIT : continuer=0;
             }
        }
    }



    • Partager sur Facebook
    • Partager sur Twitter
      9 février 2020 à 11:23:27

      Salut,

      Charge ton icône en amont de la fonction pour pouvoir vérifier le bon chargement. Cette image ne doit pas dépasser 32*32 pxl.

      Bonne continuation.

      • Partager sur Facebook
      • Partager sur Twitter

      Bonhomme !! | Jeu de plateforme : Prototype.

        9 février 2020 à 15:48:50

        Salut, merci de ta réponse.

        L'image se charge bien et elle a les bonnes dimensions, mais elle ne s'affiche toujours pas.

        -
        Edité par Buschiix 9 février 2020 à 17:05:53

        • Partager sur Facebook
        • Partager sur Twitter
          9 février 2020 à 17:39:53

          Hello,

          Peut-être (je ne sais plus) mettre la ligne 16 après la 18 ?

          Edit: il manque un break en ligne 40 bis. Dans le cas présent, ça ne change rien, mais c'est un bon réflexe à prendre. J'ajouterai que mettre un "default" est très bonne habitude.

          -
          Edité par edgarjacobs 9 février 2020 à 17:43:21

          • Partager sur Facebook
          • Partager sur Twitter

          On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

            9 février 2020 à 18:01:26

            Salut Edgarjacobs, merci pour ta réponse,

            J'ai essayé d'intervertir ces deux lignes mais ça ne change rien et dans les docs SDL c'est conseillé de justement mettre SetIcon avant SetVideoMode.

            Pour le reste de tes commentaires, oui je mets habituellement toujours des break, juste un oublie, mais je ne comprends pas pourquoi mettre un default est une bonne habitude? Sur d'autres langage il est obligatoire peut-être?

            • Partager sur Facebook
            • Partager sur Twitter
              13 février 2020 à 23:34:16

              Personne n'a d'autres idées de pourquoi ça ne fonctionne pas svp?
              • Partager sur Facebook
              • Partager sur Twitter
                14 février 2020 à 0:22:07

                Salut,

                J'ai regardé un vieux projet et j'ai dans cet ordre :

                SDL_Init, SDL_WM_SetIcon, SDL_SetVideoMode, SDL_WM_SetCaption.

                Juste au cas où, tu es sur quel système, OS ?

                C'est marrant, je viens de regarder comment j'avais fait en SDL2 et en fait, je n'ai rien fait mais l'icône est là. Je suppose qu'il prend par défaut l'icône encapsulé.

                Pour encapsuler un icône, tu crées un nouveau fichier .rc (empty file) "ressources.rc" par exemple et tu y mets cette ligne :

                1 ICON "monIcone.ico"

                Le 1 fait partie du truc, il faut le mettre.

                Pour créer un icône, tu fais comme tu veux, ce ne sont pas les softs gratos qui manquent. Il est possible qu'il soit ensuite repris automatiquement.

                J'ai un vague souvenir d'avoir eu ce genre de souci, mais je ne me rappelle vraiment plus comment l'avoir résolu. Je travaille beaucoup avec des templates et ma bibliothèque, ce qui me permet de partir d'une base dont les problèmes ont été résolus sans avoir à me cogner 25 fois le même souci et me poser la question de savoir comment j'avais résolu le problème les fois d'avant. Puis surtout, j'ai lâché la SDL 1.x.

                Le Default est une bonne habitude parce que quand tu vas attaquer un switch sur un type (enum) qui possède un grand nombre de valeurs, ça va éviter 200 warnings inutiles qui empêchent de voir l'essentiel de la messagerie de compilation.

                Bonne continuation.

                • Partager sur Facebook
                • Partager sur Twitter

                Bonhomme !! | Jeu de plateforme : Prototype.

                  14 février 2020 à 17:25:20

                  Salut, merci pour ta réponse !

                  Je code sur Ubuntu avec une machine virtuel (VirtualBox)

                  J'ai essayé en l'encapsulant mais ça ne fonctionne pas non plus, après je n'ais jamais utilisé ça, est-ce qu'il faut faire quelques choses en particulier pour qu'il soit compilé avec le programme?

                  Merci pour l'explication pour le Default du switch !

                  • Partager sur Facebook
                  • Partager sur Twitter
                    18 février 2020 à 16:47:50

                    Je refais un petit up, je n'ais toujours pas réussis à corriger mon problème :/

                    D'autres proposition de solutions svp?

                    Merci d'avances !

                    • Partager sur Facebook
                    • Partager sur Twitter
                      21 février 2020 à 12:01:50

                      Je fais un up encore une fois en espérant que quelqu'un ait finalement une idée svp :'(

                      • Partager sur Facebook
                      • Partager sur Twitter
                        22 février 2020 à 8:23:34

                        Salut,

                        Tu peux voir tout de suite si l'encapsulation de ton icône a fonctionner, si c'est le cas alors ton .exe possède cet icône.

                        Sinon, je n'ai rien de mieux à te proposer, ton code me semble parfaitement correct. Essaie de le

                        compiler sur ta machine physique, peut-être cela vient-il de ta VM ?

                        Bonne continuation.

                        -
                        Edité par drx 22 février 2020 à 8:23:58

                        • Partager sur Facebook
                        • Partager sur Twitter

                        Bonhomme !! | Jeu de plateforme : Prototype.

                          22 février 2020 à 10:54:02

                          Hello,

                          Ton code fonctionne. Peux-tu le modifier comme ceci et le tester:

                              /* Chargement de l'icône AVANT SDL_SetVideoMode */
                          	SDL_Surface *icon;
                          	icon=SDL_LoadBMP("sdl_icone.bmp");
                          	if(icon) {
                          		SDL_WM_SetIcon(icon,NULL);
                          		SDL_FreeSurface(icon);
                          	}
                          	else
                          		printf("icon not loaded: %s",SDL_GetError());
                          
                          

                          Au fait, quelles sont les dimensions de ton bmp ? Il me semble qu'elles ne peuvent pas dépasser 32x32 --> non, j'ai testé avec un fichier qui fait 71x96, ça fonctionne

                          -
                          Edité par edgarjacobs 22 février 2020 à 11:09:09

                          • Partager sur Facebook
                          • Partager sur Twitter

                          On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

                            24 février 2020 à 7:12:40

                            Salut, j'utilises un fichier en 32×32.

                            J'ai essayé la modification, mais l'image se charge correctement, donc ça n'affiche pas le message d'erreur. J'essayerais d'utiliser le programme sous windows ce soir et je vous tiens au courant.

                            Merci de votre aide !

                            • Partager sur Facebook
                            • Partager sur Twitter

                            SDL affichage icone

                            × 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