Texte en SDL
2 participants
Page 1 sur 1
Texte en SDL
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 !
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- Administrateur
- Nombre de messages : 12291
Age : 37
Localisation : Clermont-Ferrand
Profession / Etudes : Ingénieur
Points : 22511
Date d'inscription : 10/03/2005
Re: Texte en SDL
Je te poste ca si je le retrouve dans mon autre pc.
Duche- Modérateur
- Nombre de messages : 2210
Age : 39
Localisation : Louvain-la-Neuve (Belgique)
Profession / Etudes : Développeur en optimisation
Points : 8277
Date d'inscription : 16/01/2006
Re: Texte en SDL
Tout d'abord, une classe qui gère les polices:
dans le .h
dans le .cpp
Une fonction pour faciliter les rectangles
Une fonction de blit indispensable:
Fonction permettant d'afficher du texte comme le printf (au point de vue des paramètres
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- Modérateur
- Nombre de messages : 2210
Age : 39
Localisation : Louvain-la-Neuve (Belgique)
Profession / Etudes : Développeur en optimisation
Points : 8277
Date d'inscription : 16/01/2006
Re: Texte en SDL
note: il faut include les librairies
SDL/SDL.h
sdl/sdl_ttf.h
windows.h
SDL/SDL.h
sdl/sdl_ttf.h
windows.h
Duche- Modérateur
- Nombre de messages : 2210
Age : 39
Localisation : Louvain-la-Neuve (Belgique)
Profession / Etudes : Développeur en optimisation
Points : 8277
Date d'inscription : 16/01/2006
Re: Texte en SDL
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 ?
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- Administrateur
- Nombre de messages : 12291
Age : 37
Localisation : Clermont-Ferrand
Profession / Etudes : Ingénieur
Points : 22511
Date d'inscription : 10/03/2005
Re: Texte en SDL
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.
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- Modérateur
- Nombre de messages : 2210
Age : 39
Localisation : Louvain-la-Neuve (Belgique)
Profession / Etudes : Développeur en optimisation
Points : 8277
Date d'inscription : 16/01/2006
Re: Texte en SDL
Le C est dépassé maintenant. Les langages orientés objets sont devenu vraiment puissants, faut pas hésiter à les utiliser !!
Duche- Modérateur
- Nombre de messages : 2210
Age : 39
Localisation : Louvain-la-Neuve (Belgique)
Profession / Etudes : Développeur en optimisation
Points : 8277
Date d'inscription : 16/01/2006
Re: Texte en SDL
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- Administrateur
- Nombre de messages : 12291
Age : 37
Localisation : Clermont-Ferrand
Profession / Etudes : Ingénieur
Points : 22511
Date d'inscription : 10/03/2005
Re: Texte en SDL
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)
(je regarde si mon code peut facilement être traduit en C)
Duche- Modérateur
- Nombre de messages : 2210
Age : 39
Localisation : Louvain-la-Neuve (Belgique)
Profession / Etudes : Développeur en optimisation
Points : 8277
Date d'inscription : 16/01/2006
Re: Texte en SDL
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- Modérateur
- Nombre de messages : 2210
Age : 39
Localisation : Louvain-la-Neuve (Belgique)
Profession / Etudes : Développeur en optimisation
Points : 8277
Date d'inscription : 16/01/2006
Re: Texte en SDL
Cool !
J'essaie ça demain et je te dis si ça marche ! Merci !!!
J'essaie ça demain et je te dis si ça marche ! Merci !!!
Julien- Administrateur
- Nombre de messages : 12291
Age : 37
Localisation : Clermont-Ferrand
Profession / Etudes : Ingénieur
Points : 22511
Date d'inscription : 10/03/2005
Re: Texte en SDL
Ca marchait ? :p
Duche- Modérateur
- Nombre de messages : 2210
Age : 39
Localisation : Louvain-la-Neuve (Belgique)
Profession / Etudes : Développeur en optimisation
Points : 8277
Date d'inscription : 16/01/2006
Re: Texte en SDL
Ah oui ! lol Ca remonte à longtemps ça !!
Ca a bien fini par marcher oui ! ^^
Ca a bien fini par marcher oui ! ^^
Julien- Administrateur
- Nombre de messages : 12291
Age : 37
Localisation : Clermont-Ferrand
Profession / Etudes : Ingénieur
Points : 22511
Date d'inscription : 10/03/2005
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|
Jeu 2 Juil 2015 - 15:16 par louaraychi
» Devoir maison sur équilibre et réaction chimique
Dim 1 Fév 2015 - 17:19 par sararose
» Ma présentation
Sam 25 Oct 2014 - 23:29 par Rith
» projet scientique sur la LUMIERE
Ven 26 Sep 2014 - 20:33 par benjamin-010
» La trajectoire de la Terre
Mar 5 Aoû 2014 - 22:19 par Alban
» Equilibrer une réaction redox
Dim 8 Juin 2014 - 21:18 par Courtney ♥
» les effets sur les lignes de transport de l’électricité
Ven 30 Mai 2014 - 17:14 par leila14
» lignes de transport de l'électricité
Ven 30 Mai 2014 - 17:07 par leila14
» Gravitation
Ven 16 Mai 2014 - 20:16 par fatimaa
» Maquette suspension de moto 2D
Jeu 17 Avr 2014 - 17:20 par Sti2d