Partage
  • Partager sur Facebook
  • Partager sur Twitter

[SDL] fermeture de la fenetre quand on passe la souris

Au premier menu

    14 juin 2006 à 10:53:25

    Salut,

    Voila en fait j'ai un problème avec mon tetris.
    Dans le menu principal, si on met la souris dans la fenêtre il se ferme :( .
    Le problème c'est que sa ne le fait pas sur tous les ordinateur mais sur plusieurs quand même :euh: .

    Voila le code de la fonction où sa foire:

    int main(int argc, char *argv[])
    {
        int continuer = 1;
        SDL_Event event;
        SDL_Surface *ecran = NULL,*texte = NULL;
        SDL_Rect positionTexte;
        TTF_Font *police = NULL,*police2 = NULL;
        SDL_Color couleurBlanche = {255, 255, 255};



        SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER);
        TTF_Init();
        SDL_WM_SetIcon(IMG_Load("images/icone.bmp"), NULL);

        ecran = SDL_SetVideoMode(LARGEUR_FENETRE, HAUTEUR_FENETRE, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
        SDL_WM_SetCaption("Tetris de Boced66", NULL);

        police = TTF_OpenFont("police.ttf", 45);
        police2 = TTF_OpenFont("police.ttf", 15);
        texte = TTF_RenderText_Blended(police, "Tetris Boced66", couleurBlanche);

        positionTexte.x = 0;
        positionTexte.y = 0;



        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_KP1: // Demande à jouer
                            if(jeu(ecran)==1)continuer = 0;
                            break;
                        case SDLK_KP2: // Demande l'aide
                            if(aide(ecran)==1)continuer = 0;
                            break;
                        case SDLK_KP3: // Demande A propos
                            if(a_propos(ecran)==1)continuer = 0;
                            break;
                    }
                    break;
                /*Pour que la fenetre ne se ferme pas au passage de la souris (essai qui ne fonctionne pas).*/
                case SDL_ACTIVEEVENT:
                    if ((event.active.state & SDL_APPMOUSEFOCUS) == SDL_APPMOUSEFOCUS)
                        continuer = 1;
                    break;

          }

            SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));


            TTF_SetFontStyle(police, TTF_STYLE_ITALIC | TTF_STYLE_UNDERLINE);
            texte = TTF_RenderText_Blended(police, "Tetris Boced66", couleurBlanche);
            positionTexte.x = ecran->w/2 - texte->w/2;
            positionTexte.y = 20;
            SDL_BlitSurface(texte, NULL, ecran, &positionTexte);
            SDL_FreeSurface(texte);

            TTF_SetFontStyle(police, 0);
            positionTexte.y = positionTexte.y+20+texte->h;
            texte = TTF_RenderText_Blended(police, "1) Jouer", couleurBlanche);
            positionTexte.x = ecran->w/2 - texte->w/2;
            SDL_BlitSurface(texte, NULL, ecran, &positionTexte);
            SDL_FreeSurface(texte);


            positionTexte.y = positionTexte.y+20+texte->h;
            texte = TTF_RenderText_Blended(police, "2) Aide", couleurBlanche);
            positionTexte.x = ecran->w/2 - texte->w/2;
            SDL_BlitSurface(texte, NULL, ecran, &positionTexte);
            SDL_FreeSurface(texte);


            positionTexte.y = positionTexte.y+20+texte->h;
            texte = TTF_RenderText_Blended(police, "3) A propos", couleurBlanche);
            positionTexte.x = ecran->w/2 - texte->w/2;
            SDL_BlitSurface(texte, NULL, ecran, &positionTexte);
            SDL_FreeSurface(texte);


            positionTexte.y = positionTexte.y+20+texte->h;
            texte = TTF_RenderText_Blended(police2, "ESC : Quitter", couleurBlanche);
            positionTexte.x = ecran->w/2 - texte->w/2;
            SDL_BlitSurface(texte, NULL, ecran, &positionTexte);
            SDL_FreeSurface(texte);
            SDL_Flip(ecran);
        }
        TTF_CloseFont(police);
        TTF_Quit();


        SDL_Quit();
        return EXIT_SUCCESS;
    }



    Si quelquand sait comment empecher ça? ^^
    Merci,
    @+
    • Partager sur Facebook
    • Partager sur Twitter
      15 juin 2006 à 19:19:47

      un petit up :p
      personne n'a une idée?
      • Partager sur Facebook
      • Partager sur Twitter
        15 juin 2006 à 19:32:50

        Tu as une variable SDL_Surface texte que tu libère plusieurs fois.
        Pourquoi la supprime tu après chaque écrit ?

        Car ensuite, tu essaye d'ecrire dans une surface qui n'existe plus !
        Normal que ca plante !

        :p
        • Partager sur Facebook
        • Partager sur Twitter
          15 juin 2006 à 19:39:43

          Salut,

          Pour la variable texte, en fait se ne la suprime pas mais sa la vide.
          Avant je ne fesais pas sa et comme je réecrivait dedans a chaque fois sans effacer se qu'il y avai deja dedans, mon programme consomais plus de 1 Go de ram en quelques secondes.

          Merci quand même
          @+

          PS: si vous avez d'autres solution :euh:
          • Partager sur Facebook
          • Partager sur Twitter
            15 juin 2006 à 19:40:03

            déja ca fait plaisir yavait pas que moi qui avait un bug sur d'autres pcs :) sinon dsl je sais pas :(
            • Partager sur Facebook
            • Partager sur Twitter

            [SDL] fermeture de la fenetre quand on passe la souris

            × 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