Forum d'entraide en sciences
Bienvenue sur le forum d'entraide en sciences ! Inscrivez-vous gratuitement pour accéder à l'intégralité du forum ou connectez-vous si c'est déjà fait !

Bonne visite !

Rejoignez le forum, c'est rapide et facile

Forum d'entraide en sciences
Bienvenue sur le forum d'entraide en sciences ! Inscrivez-vous gratuitement pour accéder à l'intégralité du forum ou connectez-vous si c'est déjà fait !

Bonne visite !
Forum d'entraide en sciences
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
-40%
Le deal à ne pas rater :
Tefal Ingenio Emotion – Batterie de cuisine 10 pièces (induction, ...
59.99 € 99.99 €
Voir le deal

Texte en SDL

2 participants

Aller en bas

Texte en SDL Empty Texte en SDL

Message par Julien Ven 30 Mai 2008 - 21:03

Bonjour !

Voilà, je sais comment afficher une chaîne de caractères statique en SDL mais j'aurais voulu savoir comment on peut afficher une chaîne de caractères dynamique...

Si quelqu'un a la réponse, ça m'aidera bien !
Julien
Julien
Administrateur
Administrateur

Masculin Nombre de messages : 12291
Age : 37
Localisation : Clermont-Ferrand
Profession / Etudes : Ingénieur
Points : 22498
Date d'inscription : 10/03/2005

Revenir en haut Aller en bas

Texte en SDL Empty Re: Texte en SDL

Message par Duche Ven 30 Mai 2008 - 21:30

Je te poste ca si je le retrouve dans mon autre pc.
Duche
Duche
Modérateur
Modérateur

Masculin Nombre de messages : 2210
Age : 39
Localisation : Louvain-la-Neuve (Belgique)
Profession / Etudes : Développeur en optimisation
Points : 8264
Date d'inscription : 16/01/2006

Revenir en haut Aller en bas

Texte en SDL Empty Re: Texte en SDL

Message par Duche Ven 30 Mai 2008 - 22:14

Tout d'abord, une classe qui gère les polices:

dans le .h
Code:

#ifndef uchar
typedef unsigned char uchar;
#endif

class PoliceTTF
{
  public:
    PoliceTTF(char*,int,bool,bool,bool);
    ~PoliceTTF();
 
  private:
    TTF_Font* font;
 
  friend void PrintSDLTTF(const PoliceTTF&,int,int,int,SDL_Surface*,int,int,char*,...);
  friend void WriteSDLTTF(const PoliceTTF&,int,int,int,SDL_Surface*,int,int,char*,int);
};

dans le .cpp
Code:

PoliceTTF::PoliceTTF(char* police,int taille,bool ital,bool gras,bool ssln)
{
  TTF_Init();
  font = TTF_OpenFont(police,taille);
  uchar flag=0;
  if(ital)
    flag |= TTF_STYLE_ITALIC;
  if(gras)
    flag |= TTF_STYLE_BOLD;
  if(ssln)
    flag |= TTF_STYLE_UNDERLINE;
  TTF_SetFontStyle(font,flag);
}

PoliceTTF::~PoliceTTF()
{
  TTF_CloseFont(font);
}

Une fonction pour faciliter les rectangles
Code:

inline SDL_Rect Rect(int x,int y,int w,int h)
{
  SDL_Rect r;
  r.x = x;
  r.y = y;
  r.w = w;
  r.h = h;
}

Une fonction de blit indispensable:
Code:

inline void Blit(SDL_Surface* source,int x1,int y1,int w,int h,SDL_Surface* dest,int x2,int y2)
{
  SDL_Rect s = Rect(x1,y1,w,h);
  SDL_Rect d = Rect(x2,y2,0,0);
  SDL_Rect* ps = &s;
  if (x1 < 0)
    ps = NULL;
  SDL_BlitSurface(source,ps,dest,&d);
}

Fonction permettant d'afficher du texte comme le printf (au point de vue des paramètres
Code:

void PrintSDLTTF(const PoliceTTF& police,int CouleurR,int CouleurG,int CouleurB,SDL_Surface* dest,int x,int y,char* text,...)
{
  char buf[300];
  va_list args;
  va_start(args,text);
  vsprintf(buf,text,args);
  va_end(args);
  SDL_Color couleur;
  couleur.r = CouleurR;
  couleur.g = CouleurG;
  couleur.b = CouleurB;
  SDL_Surface* TempTexte = TTF_RenderText_Solid(police.font,buf,couleur);
  if(TempTexte)
    Blit(TempTexte,0,0,TempTexte->w,TempTexte->h,dest,x,y);
  SDL_FreeSurface(TempTexte);
}
Duche
Duche
Modérateur
Modérateur

Masculin Nombre de messages : 2210
Age : 39
Localisation : Louvain-la-Neuve (Belgique)
Profession / Etudes : Développeur en optimisation
Points : 8264
Date d'inscription : 16/01/2006

Revenir en haut Aller en bas

Texte en SDL Empty Re: Texte en SDL

Message par Duche Ven 30 Mai 2008 - 22:18

note: il faut include les librairies
SDL/SDL.h
sdl/sdl_ttf.h
windows.h
Duche
Duche
Modérateur
Modérateur

Masculin Nombre de messages : 2210
Age : 39
Localisation : Louvain-la-Neuve (Belgique)
Profession / Etudes : Développeur en optimisation
Points : 8264
Date d'inscription : 16/01/2006

Revenir en haut Aller en bas

Texte en SDL Empty Re: Texte en SDL

Message par Julien Sam 31 Mai 2008 - 6:34

Merci beaucoup le_duche, c'est exactement ce qu'il me faut !

Dommage que ce soit du C++ ! Je n'ai vu que le C pour le moment donc je ne connais pas encore le principe des classes par exemple. C'est quoi l'équivalent d'une classe en C ?
Julien
Julien
Administrateur
Administrateur

Masculin Nombre de messages : 12291
Age : 37
Localisation : Clermont-Ferrand
Profession / Etudes : Ingénieur
Points : 22498
Date d'inscription : 10/03/2005

Revenir en haut Aller en bas

Texte en SDL Empty Re: Texte en SDL

Message par Duche Sam 31 Mai 2008 - 12:37

Ca n'a pas d'équivalent !
Une classe c'est pour définir un type d'objet.

par exemple, tu veux te faire chauffer un hamburger. En C tu devras faire le cablâge et les soudures en fonction de ton temps de cuisson, de la température souhaitée. Tu pourra réutiliser ton câblage pour tous les hamburger que tu feras, mais si tu veux te faire chauffer une pizza, tu devras tout recommencer.
En C++ tu fabriques un micro-onde, et tu n'a plus qu'à régler l'interface à chaque utilisation.
Duche
Duche
Modérateur
Modérateur

Masculin Nombre de messages : 2210
Age : 39
Localisation : Louvain-la-Neuve (Belgique)
Profession / Etudes : Développeur en optimisation
Points : 8264
Date d'inscription : 16/01/2006

Revenir en haut Aller en bas

Texte en SDL Empty Re: Texte en SDL

Message par Duche Sam 31 Mai 2008 - 12:43

Le C est dépassé maintenant. Les langages orientés objets sont devenu vraiment puissants, faut pas hésiter à les utiliser !!
Duche
Duche
Modérateur
Modérateur

Masculin Nombre de messages : 2210
Age : 39
Localisation : Louvain-la-Neuve (Belgique)
Profession / Etudes : Développeur en optimisation
Points : 8264
Date d'inscription : 16/01/2006

Revenir en haut Aller en bas

Texte en SDL Empty Re: Texte en SDL

Message par Julien Sam 31 Mai 2008 - 13:35

Ah... ! On va le voir l'an prochain et là, on n'a pas le droit de s'en servir ! Mais c'est rageant quand on voit la puissance du C++ par rapport au C d'après ta métaphore ! lol
Julien
Julien
Administrateur
Administrateur

Masculin Nombre de messages : 12291
Age : 37
Localisation : Clermont-Ferrand
Profession / Etudes : Ingénieur
Points : 22498
Date d'inscription : 10/03/2005

Revenir en haut Aller en bas

Texte en SDL Empty Re: Texte en SDL

Message par Duche Sam 31 Mai 2008 - 16:16

Ben disons que tout ce qui se fait en C++ peut théoriquement être traduit en C, mais c'est tellement plus propre avec les objets !!!

(je regarde si mon code peut facilement être traduit en C)
Duche
Duche
Modérateur
Modérateur

Masculin Nombre de messages : 2210
Age : 39
Localisation : Louvain-la-Neuve (Belgique)
Profession / Etudes : Développeur en optimisation
Points : 8264
Date d'inscription : 16/01/2006

Revenir en haut Aller en bas

Texte en SDL Empty Re: Texte en SDL

Message par Duche Sam 31 Mai 2008 - 16:27

Voila, ceci devrait remplacer mon objet je pense.

Code:

#ifndef uchar
typedef unsigned char uchar;
#endif

struct PoliceTTF
{
  TTF_Font* font;
};

struct PoliceTTF CreateNewPolice(char* police,int taille,bool ital,bool gras,bool ssln)
{
  TTF_Init();
   struct PoliceTTF new_police;
  new_police.font = TTF_OpenFont(police,taille);
  uchar flag=0;
  if(ital)
    flag |= TTF_STYLE_ITALIC;
  if(gras)
    flag |= TTF_STYLE_BOLD;
  if(ssln)
    flag |= TTF_STYLE_UNDERLINE;
  TTF_SetFontStyle(new_police.font,flag);
   return new_police;
}

void DeletePolice(struct PoliceTTF policettf)
{
  TTF_CloseFont(policettf.font);
}

void PrintSDLTTF(const struct PoliceTTF& police,int CouleurR,int CouleurG,int CouleurB,SDL_Surface* dest,int x,int y,char* text,...)
{
  char buf[300];
  va_list args;
  va_start(args,text);
  vsprintf(buf,text,args);
  va_end(args);
  SDL_Color couleur;
  couleur.r = CouleurR;
  couleur.g = CouleurG;
  couleur.b = CouleurB;
  SDL_Surface* TempTexte = TTF_RenderText_Solid(police.font,buf,couleur);
  if(TempTexte)
    Blit(TempTexte,0,0,TempTexte->w,TempTexte->h,dest,x,y);
  SDL_FreeSurface(TempTexte);
}
Duche
Duche
Modérateur
Modérateur

Masculin Nombre de messages : 2210
Age : 39
Localisation : Louvain-la-Neuve (Belgique)
Profession / Etudes : Développeur en optimisation
Points : 8264
Date d'inscription : 16/01/2006

Revenir en haut Aller en bas

Texte en SDL Empty Re: Texte en SDL

Message par Julien Sam 31 Mai 2008 - 20:54

Cool ! Very Happy

J'essaie ça demain et je te dis si ça marche ! Merci !!!
Julien
Julien
Administrateur
Administrateur

Masculin Nombre de messages : 12291
Age : 37
Localisation : Clermont-Ferrand
Profession / Etudes : Ingénieur
Points : 22498
Date d'inscription : 10/03/2005

Revenir en haut Aller en bas

Texte en SDL Empty Re: Texte en SDL

Message par Duche Mar 28 Oct 2008 - 18:04

Ca marchait ? :p
Duche
Duche
Modérateur
Modérateur

Masculin Nombre de messages : 2210
Age : 39
Localisation : Louvain-la-Neuve (Belgique)
Profession / Etudes : Développeur en optimisation
Points : 8264
Date d'inscription : 16/01/2006

Revenir en haut Aller en bas

Texte en SDL Empty Re: Texte en SDL

Message par Julien Mar 28 Oct 2008 - 19:27

Ah oui ! lol Ca remonte à longtemps ça !!

Ca a bien fini par marcher oui ! ^^
Julien
Julien
Administrateur
Administrateur

Masculin Nombre de messages : 12291
Age : 37
Localisation : Clermont-Ferrand
Profession / Etudes : Ingénieur
Points : 22498
Date d'inscription : 10/03/2005

Revenir en haut Aller en bas

Texte en SDL Empty Re: Texte en SDL

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
Ne ratez plus aucun deal !
Abonnez-vous pour recevoir par notification une sélection des meilleurs deals chaque jour.
IgnorerAutoriser