IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SDL Discussion :

Probleme de rendu avec TTF


Sujet :

SDL

  1. #1
    Membre régulier Avatar de JonathanTC
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2015
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2015
    Messages : 90
    Points : 112
    Points
    112
    Par défaut Probleme de rendu avec TTF
    bonjour, j'ai un probleme avec ttf

    Je programme un remake de flappy bird pour cela j'ai une boule principal dans laquelle toute les 1,5 secondes j’insère une tuyau (image).
    Dans cette boucle principal j'affiche aussi le score grâce a une texture que je créer a l'aide de SDL_TTF.

    Quand je lance le jeu sans dessiner le texte du score tout fonctionne bien et mes tuyaux s'affiche comme il faut, mais si de dessine le texte du score grâce à la méthode ci-dessous, certain tuyaux ne s'affichent pas. Je pète les plombs je comprend pas d'où viens le problème.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    void Text::Dessiner()
    {
        // Créer la texture
        surface = TTF_RenderText_Blended(font,text.c_str(),color);
        texture = SDL_CreateTextureFromSurface(rendu,surface);
     
        // Récupérer la taille de la texture
        SDL_QueryTexture(texture,NULL,NULL,&position.w,&position.h);
     
        // Copier la texture dans le rendu
        SDL_RenderCopyEx(rendu,texture,NULL,&position,angle,NULL,flip);
     
        // Supprime surface et texture
        SDL_DestroyTexture(texture);
        SDL_FreeSurface(surface);
    }
    Le code que j'utilise pour générer la texture d'une image pour créer mes tuyaux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    Image::Image(const char *chemin, SDL_Renderer *ptr_rendu)
    {
        rendu = ptr_rendu;
     
        SDL_SetRenderDrawColor(rendu,0,0,0,0);
     
        // Charger image avec une transparence
        SDL_Surface *surface = SDL_LoadBMP(chemin);
        SDL_SetColorKey(surface,SDL_TRUE,SDL_MapRGB(surface->format,255,0,255));
     
        texture = SDL_CreateTextureFromSurface(rendu,surface);
        SDL_SetTextureBlendMode(texture, SDL_BLENDMODE_BLEND);
     
        // Recuperer la taille
        SDL_QueryTexture(texture,NULL,NULL,&position.w,&position.h);
        SDL_QueryTexture(texture,NULL,NULL,&calque.w,&calque.h);
     
        // liberer mémoire de la surface
        SDL_FreeSurface(surface);
    }
    le code que j'utilise pour créer mes tuyaux:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    // toute les 1,5 secondes je créer un nouveau tuyau
    if(apparition.Check_time(1500))
    {
        liste_tuyaux.push_back(new Image("images/tuyau-min.bmp",rendu));
            liste_tuyaux.back()->Echelle(3.5);
            liste_tuyaux.back()->Positioner(800,liste_tuyaux.back()->Nombre_aleatoire(-380,-170));  // -380 position minimum et -170
     
        SDL_Rect *position = liste_tuyaux.back()->GetPosition();
     
        liste_collisions.push_back(new SDL_Rect{position->x,position->y,105,476});
        liste_collisions.push_back(new SDL_Rect{position->x,position->y+476+147,105,476});
     
        liste_validation.push_back(new SDL_Rect{position->x + 52, position->y + 476, 1, 147});
    }

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Quelques remarques :
    • vous ne devriez pas charger la même image toutes les 1.5s. Entre autre, les accès disque sont "lents" (par rapport à tout le reste) (de même pour le texte) ;
    • vous ne devriez pas faire des new pour les SDL_Rect. Remplissez votre vector de SDL_Rect (non pointeurs), c'est bien plus simple à gérer.

    D'ailleurs, quid si le texte met plus de 1.5s à se générer ?
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/01/2010, 10h41
  2. Problem de rendu offscren avec un FBO
    Par F-fisher dans le forum OpenGL
    Réponses: 3
    Dernier message: 23/11/2008, 07h31
  3. [Kylix] Probleme de séparateur avec Kylix2 ?
    Par jeanphy dans le forum EDI
    Réponses: 4
    Dernier message: 10/02/2003, 16h41
  4. Réponses: 12
    Dernier message: 23/10/2002, 11h56
  5. Probleme d'impression avec la méthode TForm->Print()
    Par Kid Icarus dans le forum C++Builder
    Réponses: 13
    Dernier message: 31/07/2002, 14h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo