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 :

Afficher du texte avec SDL.


Sujet :

SDL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 26
    Points : 16
    Points
    16
    Par défaut Afficher du texte avec SDL.
    Bonjour,

    J'utilise la bibliothèque nommée SDL afin d'afficher la trajectoire d'un objet dans une fenêtre. J'aimerais également pouvoir ajouter du texte, comme les coordonnées d'un point ou d'autres infos, dans la même fenêtre, ou au pire dans la console.
    Cependant, pour afficher la fenêtre graphique, il faut lancer le projet en "Win32 GUI" (cf tutorial SDL). J'ai l'impression que ça empêche d'afficher du texte dans la console (avec printf). Y'a-t-il un moyen d'afficher du texte dans une fenêtre créée avec SDL? Un autre moyen pour afficher du texte dans la console quand une "fenêtre SDL" est créée?

    Merci!!

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Il faut utiliser SDL_ttf, et voici un exemple d'utilisation, c'est une fonction que tu peut utiliser directement à condition de supprimer la macro qui affiche les message d'erreur sur la console:

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    /* --------------------------------------------------------------------------
       Create_text
       --------------------------------------------------------------------------
       Fonction privee de creation de texte.
       --------------------------------------------------------------------------
       E: Pointeur de la surface sur laquelle rendre le texte.
       E: Position X du texte.
       E: Position Y du texte.
       E: Taille de la police.
       E: Couleur de la police (a creer avec la fonction SDL_MapRGB).
       E: Nom de la police a utiliser.
       E: Texte a rendre.
       S:
       -------------------------------------------------------------------------- */
    static void Create_text (SDL_Surface * p_screen,
                             short x, short y,
                             short font_size, Uint32 i_color,
                             const char * p_font_face, const char * p_message)
    {
       TTF_Font      *   p_font      = NULL;
       SDL_Surface   *   s_text      = NULL;
       SDL_Rect          rect_dest;
       SDL_Color         color;
     
     
     
     
       /* ----- Initialisation de SDL_ttf ----- */
     
       if (TTF_Init () < 0)
       {
          ERROR_MSG (
             "draw_text",
             "Impossible d'initialiser SDL_ttf !\n"
          );
     
          return;
       }
     
       /* ----- */
     
     
     
     
       /* ----- Chargement de toutes les donnees necessaires ----- */
     
       /* Recuperation des informations de couleurs. */
       color.r = (i_color & SDL_MapRGB (p_screen->format, 255, 0, 0)) >> 16;
       color.g = (i_color & SDL_MapRGB (p_screen->format, 0, 255, 0)) >> 8;
       color.b = (i_color & SDL_MapRGB (p_screen->format, 0, 0, 255));
     
     
       /* Chargement de la police */
       p_font = TTF_OpenFont (p_font_face, font_size);
     
       if (! p_font)
       {
          ERROR_MSG (
             "draw_text",
             "Impossible de charger la police !\n"
          );
     
          return;
       }
     
       /* ----- */
     
     
     
     
       /* ----- Rendu du texte ----- */
     
       s_text = TTF_RenderText_Solid (p_font, p_message, color);
     
     
       /* Mise en place du message sur la surface de jeu */
       if (s_text == NULL)
       {
          ERROR_MSG (
             "draw_text",
             "Impossible de rendre le texte !\n"
          );
       }
       else if (s_text != NULL)
       {
          rect_dest.x = x;
          rect_dest.y = y;
          rect_dest.w = s_text->w;
          rect_dest.h = s_text->h;
     
          /* On blit la surface a  l'ecran */
          SDL_BlitSurface (s_text, NULL, p_screen, & rect_dest);
          SDL_FreeSurface (s_text);
       }
     
     
       /* Fermeture de la police */
       TTF_CloseFont (p_font);
     
       /* ----- */
     
     
     
     
       return;
    }

    Si tu as des questions hésite pas

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 26
    Points : 16
    Points
    16
    Par défaut
    Salut,

    Merci pour ta réponse. J'ai téléchargé SDL_ttf.dll, et je l'ai copié dans le répertoire de mon programme, mais les noms des variables de ton code ne sont pas reconnues. Est-ce qu'il n'y aurait pas qqc à ajouter dans l'éditeur de lien du projet? Qu'entends-tu par "supprimer la macro qui affiche les message d'erreur sur la console"?

  4. #4
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par kmitz
    Est-ce qu'il n'y aurait pas qqc à ajouter dans l'éditeur de lien du projet ?
    Bin biensûr, faut linker la lib au projet sinon ca marche pas !

    Citation Envoyé par kmitz
    Qu'entends-tu par "supprimer la macro qui affiche les message d'erreur sur la console"?
    ERROR_MSG est une petite macro perso pour afficher les message d'erreur, la voici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #define ERROR_MSG(func_name, msg)                  \
                fprintf                                \
                (                                      \
                   stderr,                             \
                   "**>> Erreur: "func_name": "msg     \
                );
    Ajoutes-la si tu ne veut pas modifier le code de la fonction sinon bin tu as juste à remplacer les appels à la macro par un fprintf !

  5. #5
    Rédacteur

    Avatar de loka
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    2 672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 672
    Points : 5 509
    Points
    5 509
    Par défaut
    il n y a pas que le dll à telecharger mais aussi la lib (le .h)

  6. #6
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par loka
    il n y a pas que le dll à telecharger mais aussi la lib (le .h)
    Bin ca tombe sous le sens non ?! Tu n'est pas un simple utilisateur, tu est le développeur donc tu dois être en possession du nécessaire pour pouvoir te lier à la lib !
    Ce n'est pas le header qui te permet de te lier à une lib, ce n'est qu'une interface, c'est le fichier .lib ou .a qui permet au linker d'avoir le nécessaire pour la liaison

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 26
    Points : 16
    Points
    16
    Par défaut
    J'ai téléchargé SDL_ttf-2.0.7-win32.zip sur http://www.libsdl.org/projects/SDL_ttf/ et dedans y'avait que SDL_ttf.dll.
    Où sont les autres fichiers??

  8. #8
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Faut télécharger ce fichier: SDL_ttf-devel-2.0.7-VC6.zip

    Dès que le mot "devel" ou parfois "dev" se trouve dans le nom d'une archive d'une lib bin ca veut simplement dire que c'est les fichiers pour le développeur, donc les header et *.lib et/ou *.a nécessaire à la comilation et l'édition des liens !

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 26
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par CSoldier
    Faut télécharger ce fichier: SDL_ttf-devel-2.0.7-VC6.zip

    Dès que le mot "devel" ou parfois "dev" se trouve dans le nom d'une archive d'une lib bin ca veut simplement dire que c'est les fichiers pour le développeur, donc les header et *.lib et/ou *.a nécessaire à la comilation et l'édition des liens !
    Salut,

    C'est bon maintenant j'ai tout installé, mais j'arrive pas très bien à utiliser ton code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Create_text (SDL_Surface * p_screen,
                             short x, short y,
                             short font_size, Uint32 i_color,
                             const char * p_font_face, const char * p_message)
    Comment je définis *p_font_face et *p_message?

  10. #10
    Rédacteur

    Avatar de loka
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    2 672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 672
    Points : 5 509
    Points
    5 509
    Par défaut
    Tu peux aussi aller ici, c'est une partie d'un petit tuto fais par mes soins qui devrait sortir dans 1-2 jours :

    http://loka.developpez.com/tutoriel/sdl/sdl_ttf/

  11. #11
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par kmitz
    Comment je définis *p_font_face et *p_message?
    Bin se sont simplement des chaines de caractères que tu passes à la fonction, le 1° étant le nom de la police (le chemin en plus si necessaire, par exemple "fonts\comics.ttf") et le 2° est le texte à afficher (par exemple "Bonjour le monde !").

    Rien de plus compliqué !

  12. #12
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par loka
    Tu peux aussi aller ici, c'est une partie d'un petit tuto fais par mes soins qui devrait sortir dans 1-2 jours :

    http://loka.developpez.com/tutoriel/sdl/sdl_ttf/
    Sympa tes tutos loka, c'est vrai que sur le net en français y'a un manque sérieux de documentation solides et de bons tutoriels, bonne continuation

  13. #13
    Rédacteur

    Avatar de loka
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    2 672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 672
    Points : 5 509
    Points
    5 509
    Par défaut
    merci CSoldier

  14. #14
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Salut,

    Si tu veux juste voir quelques infos et que tu n'es pas en fullscreen, tu peux aussi les afficher dans le titre de la fenetre, c'est moins lourd à utliser que SDl_tff.
    Par exemple, un compteur de FPS:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    int fps = 0, done = 0;
    char title[3];
    while(!done)   // ta boucle principale
    { unsigned int checkTime = SDL_GetTicks();
    /* ici tes iterations
     * ...
     * ...
     */
      fps = 1000/(SDL_GetTicks()-checkTime);
      sprintf(title, "%d", fps);
      SDL_WM_SetCaption(title, NULL);
    }   // fin de la boucle principale

  15. #15
    Membre chevronné Avatar de Jbx 2.0b
    Homme Profil pro
    Développeur C++/3D
    Inscrit en
    Septembre 2002
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur C++/3D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2002
    Messages : 476
    Points : 1 787
    Points
    1 787
    Par défaut
    Juste un petit ajout
    Tu t'etonne de ne pas voir le texte dans une console que tu ecrit avec printf. En effet lorsque tu configure VC++ en "Win32 GUI", SDL redirige les messages dans "stdout.txt" qui est dans le repertoire de ton projet ou de ton executable.
    Tu peut donc parfaitement utiliser printf pour afficher des infos qui te serviront à debugger ton projet par exemple, mais c'est vrai que pour des informations "utiles immédiatement" , c'est peu pratique.

Discussions similaires

  1. Afficher du texte avec SDL et OpenGL
    Par moejul dans le forum SDL
    Réponses: 4
    Dernier message: 12/04/2011, 11h07
  2. [JTextComponent] Afficher du texte avec style et image
    Par jean_bobi dans le forum Composants
    Réponses: 9
    Dernier message: 30/10/2005, 13h47
  3. Zone de texte avec SDL
    Par bobtux dans le forum OpenGL
    Réponses: 2
    Dernier message: 08/03/2005, 18h47
  4. [Javascript] Afficher du texte avec des intervalles
    Par Invité4 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 02/01/2005, 21h29
  5. Comment afficher du texte avec swing ?
    Par meda dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 27/10/2004, 14h35

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