Partage
  • Partager sur Facebook
  • Partager sur Twitter

Fonction Score

erreur

    14 juin 2006 à 0:04:37

    Bonjour à une heure aussi tardive de la nuit :p .
    J'ai un problème avec une fonction que je viens de créer pour afficher le score, en fait, mon erreur est que le programme s'arrête brusquement.
    void afficherScore(SDL_Surface *ecran, int score)
    {
        SDL_Surface *texte = NULL;
        SDL_Rect position;
        TTF_Font *police = NULL;
        SDL_Color couleurNoire = {0, 0, 0};
        SDL_Color couleurFond = {255, 255, 255};

        TTF_Init();

        /* Chargement de la police */
        police = TTF_OpenFont("comic.ttf", 65);
        /* Ecriture du texte dans la SDL_Surface "texte" en mode Blended (optimal) */
        texte = TTF_RenderText_Shaded(police, score, couleurNoire, couleurFond);

        position.x = 0;
        position.y = 0;
        SDL_BlitSurface(texte, NULL, ecran, &position); /* Blit du texte par-dessus */
        SDL_Flip(ecran);

        TTF_CloseFont(police);
        TTF_Quit();

        SDL_FreeSurface(texte);
    }
    Et dans le fichier stderr.txt :
    Fatal signal: Segmentation Fault (SDL Parachute Deployed)
    • Partager sur Facebook
    • Partager sur Twitter
      14 juin 2006 à 9:16:04

      C'est normal, tu dois passer un texte (char[]) et non pas un int.
      Tu dois donc convertir ton score en chaine de caractères.
      • Partager sur Facebook
      • Partager sur Twitter
        14 juin 2006 à 14:32:17

        void afficherScore(SDL_Surface *ecran, int score)
        {
            SDL_Surface *texte = NULL;
            SDL_Rect position;
            TTF_Font *police = NULL;
            SDL_Color couleurNoire = {255, 255, 255};
            SDL_Color couleurFond = {0, 0, 255};
            char* texteScore[1] = {0};
            texteScore[0] = score;

            TTF_Init();

            /* Chargement de la police */
            police = TTF_OpenFont("comic.ttf",20);
            /* Ecriture du texte dans la SDL_Surface "texte" en mode Blended (optimal) */
            texte = TTF_RenderText_Shaded(police, texteScore[0], couleurNoire, couleurFond);

            position.x = 0;
            position.y = 0;
            SDL_BlitSurface(texte, NULL, ecran, &position); /* Blit du texte par-dessus */
            SDL_Flip(ecran);

            TTF_CloseFont(police);
            TTF_Quit();

            SDL_FreeSurface(texte);
        }

        Avec ce code j'ai la même erreur, et avec celui là :
        void afficherScore(SDL_Surface *ecran, int score)
        {
            SDL_Surface *texte = NULL;
            SDL_Rect position;
            TTF_Font *police = NULL;
            SDL_Color couleurNoire = {255, 255, 255};
            SDL_Color couleurFond = {0, 0, 255};
            char* texteScore[1] = {0};
            texteScore[0] = &score;

            TTF_Init();

            /* Chargement de la police */
            police = TTF_OpenFont("comic.ttf",20);
            /* Ecriture du texte dans la SDL_Surface "texte" en mode Blended (optimal) */
            texte = TTF_RenderText_Shaded(police, texteScore[0], couleurNoire, couleurFond);

            position.x = 0;
            position.y = 0;
            SDL_BlitSurface(texte, NULL, ecran, &position); /* Blit du texte par-dessus */
            SDL_Flip(ecran);

            TTF_CloseFont(police);
            TTF_Quit();

            SDL_FreeSurface(texte);
        }

        Tout marche mais je n'ai aucun score d'affiché
        • Partager sur Facebook
        • Partager sur Twitter
          14 juin 2006 à 14:37:45

          Tu reçois un int et ton tableau de char est vide, c'est peut-être pour ça que ça bug non ?
          Je suis pas sûr ... :euh:
          • Partager sur Facebook
          • Partager sur Twitter
            14 juin 2006 à 14:40:52

            Up...
            Ma fonction jouer, et SVP m'indiquer où dois-je mettre la fonction jouer, parce que quand je la met avant ou après le flip dans le while, ça clignotte :
            void jouer(SDL_Surface *ecran)
            {
                SDL_Surface *image = NULL, *bonus = NULL;
                SDL_Rect positionImage, positionRaquette, positionBonus;
                SDL_Event event;
                int continuer = 1,hautbas = 0 , gauchedroite = 0, vitesse = 2, afficherBonus = 0,score = 2;

                image = IMG_Load("balle1.gif");
                SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 255));

                bonus = IMG_Load("bonus.gif");
                SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 255));
                SDL_Flip(ecran);

                positionImage.x = 0;
                positionImage.y = 20;

                positionBonus.x = 250;
                positionBonus.y = 250;


                while(continuer)
                {
                    SDL_PollEvent(&event);

                    if((ecran->h - image->h) == positionImage.y)
                    {
                    hautbas = 1;
                    }
                    if(positionBonus.y == (positionImage.y + image->h)
                    && positionBonus.x < positionImage.x
                    && (positionBonus.x + bonus->w) > positionImage.x
                    && afficherBonus == 0)
                    {
                    afficherBonus = 1;
                    hautbas = 1;
                    score++;
                    }
                    if(positionImage.y == 0)
                    {
                    hautbas = 0;
                    }
                    if((ecran->w - image->w) == positionImage.x)
                    {
                    gauchedroite = 1;
                    }
                    if(positionBonus.x == (positionImage.x + image->w)
                    && positionBonus.y < (positionImage.y + image->h)
                    && positionImage.y < (positionBonus.y + bonus->h)
                    && afficherBonus == 0)
                    {
                    afficherBonus = 1;
                    gauchedroite = 1;
                    score++;
                    }
                    if(positionImage.x == 0)
                    {
                    gauchedroite = 0;
                    }

                    switch(hautbas)
                    {
                        case 1:
                        positionImage.y -= vitesse;
                        break;
                        case 0:
                        positionImage.y += vitesse;
                        break;
                    }
                    switch(gauchedroite)
                    {
                        case 1:
                        positionImage.x -= vitesse;
                        break;
                        case 0:
                        positionImage.x += vitesse;
                        break;
                    }
                    switch(event.type)
                    {
                        case SDL_QUIT :
                        continuer = 0;
                        break;
                        case SDL_KEYDOWN:
                        switch(event.key.keysym.sym)
                        {
                            case SDLK_ESCAPE:
                            continuer = 0;
                            break;
                        }
                        break;
                    }

                SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 255));
                SDL_BlitSurface(image,NULL,ecran,&positionImage);
                if(afficherBonus < 1)
                SDL_BlitSurface(bonus,NULL,ecran,&positionBonus);
                SDL_Flip(ecran);

                }



                SDL_FreeSurface(image);
                SDL_FreeSurface(bonus);
            }
            • Partager sur Facebook
            • Partager sur Twitter

            Fonction Score

            × 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