Texte en SDL
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


- Messages : 6110
Inscrit le : 10 Mar 2005
Age : 21
Localisation : Bourges
Profession / Etudes : Elève ingénieur
Feuille de personnage
Nombre de problèmes du mois résolus:


(0/0)
Re: Texte en SDL
Je te poste ca si je le retrouve dans mon autre pc.
Duche
ERROR - No keyboard Connected. Press any key to continue...
ERROR - No keyboard Connected. Press any key to continue...

le_duche- Membre


- Messages : 820
Inscrit le : 16 Jan 2006
Age : 23
Localisation : Bruxelles
Profession / Etudes : Etudiant en Math
Feuille de personnage
Nombre de problèmes du mois résolus:


(4/7)
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
ERROR - No keyboard Connected. Press any key to continue...
ERROR - No keyboard Connected. Press any key to continue...

le_duche- Membre


- Messages : 820
Inscrit le : 16 Jan 2006
Age : 23
Localisation : Bruxelles
Profession / Etudes : Etudiant en Math
Feuille de personnage
Nombre de problèmes du mois résolus:


(4/7)
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
ERROR - No keyboard Connected. Press any key to continue...
ERROR - No keyboard Connected. Press any key to continue...

le_duche- Membre


- Messages : 820
Inscrit le : 16 Jan 2006
Age : 23
Localisation : Bruxelles
Profession / Etudes : Etudiant en Math
Feuille de personnage
Nombre de problèmes du mois résolus:


(4/7)
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


- Messages : 6110
Inscrit le : 10 Mar 2005
Age : 21
Localisation : Bourges
Profession / Etudes : Elève ingénieur
Feuille de personnage
Nombre de problèmes du mois résolus:


(0/0)
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
ERROR - No keyboard Connected. Press any key to continue...
ERROR - No keyboard Connected. Press any key to continue...

le_duche- Membre


- Messages : 820
Inscrit le : 16 Jan 2006
Age : 23
Localisation : Bruxelles
Profession / Etudes : Etudiant en Math
Feuille de personnage
Nombre de problèmes du mois résolus:


(4/7)
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
ERROR - No keyboard Connected. Press any key to continue...
ERROR - No keyboard Connected. Press any key to continue...

le_duche- Membre


- Messages : 820
Inscrit le : 16 Jan 2006
Age : 23
Localisation : Bruxelles
Profession / Etudes : Etudiant en Math
Feuille de personnage
Nombre de problèmes du mois résolus:


(4/7)
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


- Messages : 6110
Inscrit le : 10 Mar 2005
Age : 21
Localisation : Bourges
Profession / Etudes : Elève ingénieur
Feuille de personnage
Nombre de problèmes du mois résolus:


(0/0)
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
ERROR - No keyboard Connected. Press any key to continue...
ERROR - No keyboard Connected. Press any key to continue...

le_duche- Membre


- Messages : 820
Inscrit le : 16 Jan 2006
Age : 23
Localisation : Bruxelles
Profession / Etudes : Etudiant en Math
Feuille de personnage
Nombre de problèmes du mois résolus:


(4/7)
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
ERROR - No keyboard Connected. Press any key to continue...
ERROR - No keyboard Connected. Press any key to continue...

le_duche- Membre


- Messages : 820
Inscrit le : 16 Jan 2006
Age : 23
Localisation : Bruxelles
Profession / Etudes : Etudiant en Math
Feuille de personnage
Nombre de problèmes du mois résolus:


(4/7)

Julien- Administrateur


- Messages : 6110
Inscrit le : 10 Mar 2005
Age : 21
Localisation : Bourges
Profession / Etudes : Elève ingénieur
Feuille de personnage
Nombre de problèmes du mois résolus:


(0/0)














