Partage
  • Partager sur Facebook
  • Partager sur Twitter

probleme SDL

il manque du code mais quoi?

Sujet résolu
    8 juin 2006 à 19:01:01

    hé oui encore moi qui ai un problème :-° . Alors enfet je créé un programme mais je n'arrive pas a faire la transition entre la page d'acceuille ( menu ) et la page de jeu. Je ne morcelle pas le fichier volontairement ( donc pas la peine de me dire de le faire ;) ) Je met le code
    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL/SDL.h>

    void jouer ();
    int main(int argc, char *argv[])
    {
        SDL_Surface *ecran = NULL, *Menu = NULL, *Link = NULL ;
        SDL_Rect positionFond;

        SDL_Event event;
        long continuer = 1;
        positionFond.x = 0;
        positionFond.y = 0;


        SDL_Init(SDL_INIT_VIDEO);

        ecran = SDL_SetVideoMode(1024, 768, 32, SDL_HWSURFACE | SDL_FULLSCREEN | SDL_RESIZABLE | SDL_NOFRAME);
        SDL_WM_SetCaption("Osmoze Arcadia", NULL);

        Menu = SDL_LoadBMP("menu.bmp");

        SDL_BlitSurface(Menu, NULL, ecran, &positionFond);
        SDL_Flip(ecran);
       
    while (continuer)
    {
        SDL_WaitEvent(&event);
        switch(event.type)
        {
            case SDL_QUIT:
                continuer = 0;
                break;
            case SDL_KEYDOWN:
                switch (event.key.keysym.sym)
                {
                    case SDLK_ESCAPE:
                        continuer = 0;
                        break;
                    case SDLK_KP3:
                        continuer = 0;
                        break;
                    case SDLK_KP1:
                        jouer;
                        break;
     
                }
                break;
        }
    }

    void jouer();
         {
                 Link = SDL_LoadBMP("linkdown.bmp");

         }

    SDL_FreeSurface(Menu);
    SDL_Quit();

        return EXIT_SUCCESS;
    }



    A partir du moment ou la fontion void jouer intervient je voudrais que celle ci affiche l'image que je charge. Je sais qu'il manque du code pour que cela marche mais je ne vois vraiment pas quoi :( .
    • Partager sur Facebook
    • Partager sur Twitter
      8 juin 2006 à 19:09:29

      tu dois lui envoyer où mettre l'image , donc la surface ecran.
      la fonction ne peut pas savoir seul ce qu'elle doit faire :)
      • Partager sur Facebook
      • Partager sur Twitter
        8 juin 2006 à 19:13:30

        Heu... oui mais comment exactement? :o
        J'ai fait plusieurs test et rien ne marche :euh:
        • Partager sur Facebook
        • Partager sur Twitter
          8 juin 2006 à 19:14:13

          Déja, je pense que

          void jouer();
               {
                       Link = SDL_LoadBMP("linkdown.bmp");

               }

          SDL_FreeSurface(Menu);

          N'est pas normal
          Ensuite, tu n'as pas fermé les accolades du main avant le début de jouer, tu as mis un point virgule après jouer().
          Et le code pour blitter une image, c'est dans le cours ! (et dans ton main aussi :lol: )

          Et un autre petit détail :
          Essaie d'utiliser SDLK_1 plutot que SDLK_KP1, histoire qu'on ait pas à modifier les sources pour jouer sur un ordinateur portable... ;)
          • Partager sur Facebook
          • Partager sur Twitter
            8 juin 2006 à 19:28:17

            Alors deja il ne faut pas mettre la () apres jouer :p .
            Sinon quand je suis la procédure exacte poru blitter une image je n'arrive pas a compiler :o
            void jouer()
                 {
                SDL_Surface *ecran = NULL, Link = NULL;
                SDL_Rect positionFond;

                positionFond.x = 0;
                positionFond.y = 0;

                SDL_Init(SDL_INIT_VIDEO);

                ecran = SDL_SetVideoMode(1024, 768, 32, SDL_HWSURFACE | SDL_FULLSCREEN | SDL_RESIZABLE | SDL_NOFRAME);
                SDL_WM_SetCaption("Osmoze Arcadia", NULL);

                /* Chargement d'une image Bitmap dans une surface */
                Link = SDL_LoadBMP("linkdown.bmp");
                /* On blitte par-dessus l'écran */
                SDL_BlitSurface(Link, NULL, ecran, &positionFond);

                SDL_Flip(ecran);
                pause();

                SDL_FreeSurface(Link); /* On libère la surface */
                SDL_Quit();

                       

                 }
            • Partager sur Facebook
            • Partager sur Twitter
              8 juin 2006 à 19:31:06

              Si si, il le faut.
              Désolé te le dire, mais ton code est complètement bugué !

              Va relire la strucuture de base d'un programme en SDL !
              On dirait que ta fonction jouer() est dans la fonction main() o_O ...
              jouer() ne produira jamais l'effet attendu ! Tu dois reblitté l'image et recommencer avec ce fameux shéma que mateo a demande de connaître par coeur...

              • Partager sur Facebook
              • Partager sur Twitter
                8 juin 2006 à 19:55:53

                A oui, en effet la fonction jouer etait dans le main :euh: . Donc maintenant j'ai séparé ces deux fonctions je peux compiler sans erreur mais ca ne marche pas.. enfin si, ca marche l'ordi fait ce que je lui ai demander mais c'est pas le résultat que j'attend :-° Je suis un peu perdu, je ne sais pas si je dois réécrire telle ou telle ligne parce qu'elle sont deja dans le main. Je met mon code comme je l'ai corriger pour le moment:
                #include <stdlib.h>
                #include <stdio.h>
                #include <SDL/SDL.h>

                void jouer ();

                int main(int argc, char *argv[])
                {
                    SDL_Surface *ecran = NULL, *Menu = NULL;
                    SDL_Rect positionFond;

                    SDL_Event event;
                    long continuer = 1;
                    positionFond.x = 0;
                    positionFond.y = 0;


                    SDL_Init(SDL_INIT_VIDEO);

                    ecran = SDL_SetVideoMode(1024, 768, 32, SDL_HWSURFACE | SDL_FULLSCREEN | SDL_RESIZABLE | SDL_NOFRAME);
                    SDL_WM_SetCaption("Osmoze Arcadia", NULL);

                    Menu = SDL_LoadBMP("menu.bmp");

                    SDL_BlitSurface(Menu, NULL, ecran, &positionFond);
                    SDL_Flip(ecran);
                   
                while (continuer)
                  {
                    SDL_WaitEvent(&event);
                    switch(event.type)
                    {
                        case SDL_QUIT:
                            continuer = 0;
                            break;
                        case SDL_KEYDOWN:
                            switch (event.key.keysym.sym)
                            {
                                case SDLK_ESCAPE:
                                    continuer = 0;
                                    break;
                                case SDLK_KP3:
                                    continuer = 0;
                                    break;
                                case SDLK_KP1:
                                    jouer();
                                    break;
                 
                            }
                            break;
                    }
                  }


                SDL_FreeSurface(Menu);
                SDL_Quit();

                    return EXIT_SUCCESS;
                }

                void jouer()
                {
                    SDL_Surface *ecran = NULL, *Link = NULL;
                    SDL_Rect positionFond;

                    positionFond.x = 0;
                    positionFond.y = 0;

                    SDL_Init(SDL_INIT_VIDEO);

                    ecran = SDL_SetVideoMode(1024, 768, 32, SDL_HWSURFACE | SDL_FULLSCREEN | SDL_RESIZABLE | SDL_NOFRAME);
                    SDL_WM_SetCaption("Osmoze Arcadia", NULL);

                    Link = SDL_LoadBMP("linkdown.bmp");
                    SDL_BlitSurface(Link, NULL, ecran, &positionFond);

                    SDL_Flip(ecran);

                    SDL_FreeSurface(Link);
                    SDL_Quit();
                }
                • Partager sur Facebook
                • Partager sur Twitter
                  8 juin 2006 à 20:13:47

                  Décris nous le résultat voulu...
                  Encore une fois, va relire le shéma de base en SDL (dans "Diriger Zozor au clavier" je pense).
                  • Partager sur Facebook
                  • Partager sur Twitter
                    8 juin 2006 à 20:14:24

                    ET OUI moi aussi j' ai était pieger avec se code, voila le probleme il faut je pense que tu mette la boucle (WHILE) comme ça sa affichera la fenetre jusqu a que tu clique sur la croix
                    bon :-°:-° a+
                    • Partager sur Facebook
                    • Partager sur Twitter
                      8 juin 2006 à 20:14:28

                      Citation : Osmoze

                      A oui, en effet la fonction jouer etait dans le main :euh: .


                      C'était ce que j'entendait par Tu n'as pas fermé les accolades du main.

                      Citation : Osmoze


                      l'ordi fait ce que je lui ai demander mais c'est pas le résultat que j'attend :-°


                      Ben oui, c'est quoi, le résultat attendu ?

                      Citation : Osmoze

                      Je suis un peu perdu

                      Si t'es pas très à l'aise, relis le court !

                      Citation : Osmoze

                      SDL_SetVideoMode(1024, 768, 32, SDL_HWSURFACE | SDL_FULLSCREEN | SDL_RESIZABLE | SDL_NOFRAME);



                      SDL_RESIZABLE, SDL_NOFRAME, ainsi que la case "SDL_QUIT" ne sont pas nécessaire si tu met en plein ecran SDL_FULLSCREEN
                      • Partager sur Facebook
                      • Partager sur Twitter
                        8 juin 2006 à 20:42:17



                        Citation : Osmoze

                        SDL_SetVideoMode(1024, 768, 32, SDL_HWSURFACE | SDL_FULLSCREEN | SDL_RESIZABLE | SDL_NOFRAME);



                        Oui mais j'ai mis tout ca parce que je voulais que l'on puisse choisir entre plein ecran ou reduit mais le probleme maintenant c'est que j'ai beau retirer SDL_FULLSCREEN quand je lance le programme recompilé la fenetre est toujour en plein ecran...

                        Sinon l'effet voulu sa serai que lorsque l'on appuis sur SDLK_KP1 ( touche 1 du pad numerique ) la fonction jouer s'active et donc l'image Link s'affiche pour remplace l'image du menu... mais cela ne fonctionne pas. :(
                        • Partager sur Facebook
                        • Partager sur Twitter
                          8 juin 2006 à 22:26:52

                          void jouer()
                               {
                              SDL_Surface *ecran = NULL, Link = NULL;
                              SDL_Rect positionFond;

                              positionFond.x = 0;
                              positionFond.y = 0;

                              SDL_Init(SDL_INIT_VIDEO);

                              ecran = SDL_SetVideoMode(1024, 768, 32, SDL_HWSURFACE | SDL_FULLSCREEN | SDL_RESIZABLE | SDL_NOFRAME);
                              SDL_WM_SetCaption("Osmoze Arcadia", NULL);

                              /* Chargement d'une image Bitmap dans une surface */
                              Link = SDL_LoadBMP("linkdown.bmp");
                              /* On blitte par-dessus l'écran */
                              SDL_BlitSurface(Link, NULL, ecran, &positionFond);

                              SDL_Flip(ecran);
                              pause();

                              SDL_FreeSurface(Link); /* On libère la surface */
                              SDL_Quit();

                                     

                               }

                          Un écran sur la fonction, et un écran sur le main, non mais ça va pas la tête o_O
                          void jouer(SDL_Surface* ecran)
                               {
                              SDL_Surface Link = NULL;
                              SDL_Rect positionFond;

                              positionFond.x = 0;
                              positionFond.y = 0;

                              /* Chargement d'une image Bitmap dans une surface */
                              Link = SDL_LoadBMP("linkdown.bmp");
                              /* On blitte par-dessus l'écran */
                              SDL_BlitSurface(Link, NULL, ecran, &positionFond);

                              SDL_Flip(ecran);
                              pause();

                              SDL_FreeSurface(Link); /* On libère la surface */
                              SDL_Quit();

                                     

                               }
                          • Partager sur Facebook
                          • Partager sur Twitter
                            8 juin 2006 à 23:12:58

                            Aba voila c'est ca qui cloche ! merci oussama. Mais sa resoud pas mon probleme ca n'affiche toujours pas Link a la place du menu...
                            • Partager sur Facebook
                            • Partager sur Twitter
                              9 juin 2006 à 22:01:31

                              Citation : moi

                              tu dois lui envoyer où mettre l'image , donc la surface ecran.


                              pour le premier probleme t'aurai pu juste lire ...

                              t'en est ou dans ton code la?
                              • Partager sur Facebook
                              • Partager sur Twitter
                                9 juin 2006 à 22:13:11

                                oui mais pourquoi ca ne marche pas, qu'est ce qui ne va pas !?
                                #include <stdlib.h>
                                #include <stdio.h>
                                #include <SDL/SDL.h>


                                void jouer ();

                                int main(int argc, char *argv[])
                                {
                                    SDL_Surface *ecran = NULL, *Menu = NULL;
                                    SDL_Rect positionFond;
                                    SDL_Rect positionMenu;

                                    SDL_Event event;
                                    long continuer = 1;
                                    positionFond.x = 0;
                                    positionFond.y = 0;


                                    SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO);



                                    ecran = SDL_SetVideoMode(1024, 768, 32, SDL_HWSURFACE  | SDL_RESIZABLE | SDL_NOFRAME);
                                    SDL_WM_SetCaption("Osmoze Arcadia", NULL);

                                    Menu = SDL_LoadBMP("menu.bmp");

                                    SDL_BlitSurface(Menu, NULL, ecran, &positionFond);
                                    SDL_Flip(ecran);
                                   
                                while (continuer)
                                  {
                                    SDL_WaitEvent(&event);
                                    switch(event.type)
                                    {
                                        case SDL_QUIT:
                                            continuer = 0;
                                            break;
                                        case SDL_KEYDOWN:
                                            switch (event.key.keysym.sym)
                                            {
                                                case SDLK_ESCAPE:
                                                    continuer = 0;
                                                    break;
                                                case SDLK_KP3:
                                                    continuer = 0;
                                                    break;
                                                case SDLK_KP1:
                                                    jouer();
                                                    break;
                                 
                                            }
                                            break;
                                    }

                                        SDL_Flip(ecran);
                                  }
                                 
                                SDL_FreeSurface(Menu);
                                SDL_Quit();
                                    return EXIT_SUCCESS;
                                }

                                void jouer(SDL_Surface* ecran)
                                {
                                    SDL_Surface *Link = NULL;
                                    SDL_Rect positionFond;

                                    positionFond.x = 0;
                                    positionFond.y = 0;

                                    Link = SDL_LoadBMP("linkdown.bmp");
                                    SDL_BlitSurface(Link, NULL, ecran, &positionFond);

                                    SDL_Flip(ecran);

                                    SDL_FreeSurface(Link);
                                    SDL_Quit();

                                }
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  9 juin 2006 à 22:53:03

                                  Ton code comporte plusieurs erreurs, et c'est tout a fait normal qu'il ne marche pas.
                                  Je te conseille vivement de relire les cours de M@teo au sujet de la SDL.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    14 juin 2006 à 16:10:52

                                    SDL_Surface Link = NULL;

                                    Je n'avais pas vu ça, mais si tu était à côté de moi, je t'aurais mis une baffe bien chaude :p .
                                    SDL_Surface* Link = NULL;

                                    Edit :
                                    jouer();

                                    Grrrrrr :colere2:
                                    jouer(ecran);
                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    probleme SDL

                                    × 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