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

C++ Discussion :

Rien ne s'affiche sur ma Surface malgré l'utilisation de sdl ttf


Sujet :

C++

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Rien ne s'affiche sur ma Surface malgré l'utilisation de sdl ttf
    Bonjour,
    Je suis encore bloqué sur mon générateur de fractales mais au moins tout compile désormais.
    J'obtiens bien une image ressemblante à celle-ci:
    http://whatisnotseen.files.wordpress...elbrot_set.jpg
    Mais je ne parviens à faire afficher un texte sur cette surface par le biais de SDL_TTF.
    Je voudrais pour commencer afficher abscisse du pixel pointé par le curseur de la souris.
    Voici mon main.cpp:

    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <iostream>
    #include <SDL.h>
    #include <Complexe.h>
    #include <Mandelbrot.h>
    #include <Julia.h>
    #include <coloration.h>
    #include <Buddhabrot.h>
    #include <create_text.h>
     
     
     
    int main(int argc, char *argv[])
    {
        Uint8 *keystates = SDL_GetKeyState(NULL);
        SDL_Surface *screen = NULL;  // declaration de l'ecran
        SDL_Event event;
    	SDL_Init(SDL_INIT_VIDEO);
        screen = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE | SDL_DOUBLEBUF); // on génère une interface de taille 640*480
     
        Mandelbrot f(screen,0, 0, 1,50);  //On Initialise une fractale
        f.dessine();                         // Puis on la dessine.
     
      /*   Complexe j(-0.683,-0.408);
         Julia f(screen, 0, 0, 1,30,j);
         f.dessine();*/
     
    /*    Buddhabrot f(screen,320,240,0.7,500);
        f.dessine(); */
     
     
     
    	while(true)
        {
    		SDL_PollEvent(&event);
     
    		if( event.type == SDL_MOUSEMOTION )
    		{
    		    char *txt=(char *)event.motion.x;
                Create_text (screen,580, 460,10, SDL_MapRGB(screen->format, 255, 255, 255),
                        "C:\WINDOWS\Fonts\ARIAL.TTF", txt ) ;
                SDL_Flip(screen);
    		}
     
    		if( event.type == SDL_MOUSEBUTTONDOWN )  // Par un clic de la souris, on centre sur la partie
    		{                                        // qui nous intéresse.
    			f.setAbs( f.getAbs() + (event.motion.x-280)/(140*f.getZoom()) );
    			f.setOrd( f.getOrd() + (event.motion.y-240)/(120*f.getZoom()) );
    			f.dessine();
     
    		}
    		SDL_PumpEvents();
     
    		if( event.button.button == SDL_BUTTON_WHEELUP || keystates[SDLK_UP]) // On zoome
    		{
    			f.setZoom(f.getZoom()*2);
    			f.setIter(f.getIter()+10);
    			f.dessine();
    		}
     
    		if( event.button.button == SDL_BUTTON_WHEELDOWN || keystates[SDLK_DOWN]) // Et on dézoome.
    		{
    			f.setZoom(f.getZoom()/2);
    			f.setIter(f.getIter()-10);
    			f.dessine();
    		}
            if (event.type==SDL_QUIT) break;
     
    		SDL_PumpEvents();
            SDL_Flip(screen);
        }
     
    	SDL_FreeSurface(screen);
        SDL_Quit();
        return EXIT_SUCCESS;
    }
    J'utilise au passage une fonction trouvée sur un forum. En voici le code:

    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
    107
    108
    109
    110
    111
    112
    113
    #include <SDL.h>
    #include <SDL_ttf.h>
     
    #define ERROR_MSG(func_name, msg)                  \
                fprintf                                \
                (                                      \
                   stderr,                             \
                   "**>> Erreur: "func_name": "msg     \
                );
    /* --------------------------------------------------------------------------
       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;
    }

    Pour résumer, mon problème est que ces lignes de code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    		if( event.type == SDL_MOUSEMOTION )
    		{
    		    char *txt=(char *)event.motion.x;
                Create_text (screen,580, 460,10, SDL_MapRGB(screen->format, 255, 255, 255),
                        "C:\WINDOWS\Fonts\ARIAL.TTF", txt ) ;
                SDL_Flip(screen);
    		}
    Ne m'affichent rien sur l'écran...

    Merci de votre aide.

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Finalement, apres plusieurs essais (notamment en mettant directement du texte "...." comme argument de la fonction; ce qui fonctionne), je pense que le probleme provient du fait mon event.motion.x soit du type "Uint16" alors que ma fonction prend du char *.
    J'ai beau chercher, je ne trouve pas comment convertir un Uint16 en char *.
    Quelqu'un aurait une idée?
    Merci d'avance.

Discussions similaires

  1. Rien ne s'affiche sur la page HTML
    Par zozotitou dans le forum Langage
    Réponses: 9
    Dernier message: 09/08/2013, 10h10
  2. Rien ne s'affiche sur mon Ribbon
    Par solaar dans le forum Access
    Réponses: 1
    Dernier message: 05/08/2009, 12h45
  3. Bug bizarre sur IE (rien ne s'affiche sur ie 6 !)
    Par monalisa38 dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 20/05/2008, 17h16
  4. Rien ne s'affiche sur la console
    Par caro_caro dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 07/04/2008, 19h10
  5. rien ne s'affiche sur mon site
    Par troumad dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 17/03/2007, 18h47

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