Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

04.07.2011, 17:34

SDL_ttf, font zeiger geht nicht global?

hallo forum..

ich mir eine Funktion geschrieben um mittels SDL_ttf einen Text auszugeben. funktioniert auch alles ok. ich wollte hier nur fragen ob das so ok ist weil mich irgendwie irritiert, dass man das font objekt immer und immer wieder erzeugen muss und gleich wieder freigeben muss. ich hab versucht das objekt außerhalb (also nur einmal beim initialisieren) zu erzeugen und dann darauft in der funktion zurückzugreifen (natürlich ohne es in der funktion wieder freizugeben) hat aber nicht funktioniert. wo ist mein denkfehler?

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void CControl::WriteText(const char* filename, string text, int fontSize, int x, int y, SDL_Color &color, bool isAlpha)
{
    if(text.empty()) return;
    SDL_Rect rect;
    TTF_Font *font = TTF_OpenFont(filename, fontSize);
    SDL_Surface *sfc = TTF_RenderText_Shaded(font, text.c_str(), color, _FontColorKey); 
    if(isAlpha) SDL_SetAlpha(sfc,SDL_SRCALPHA | SDL_RLEACCEL,_fTextAlpha);
    SDL_SetColorKey (sfc, SDL_SRCCOLORKEY | SDL_RLEACCEL, 
        SDL_MapRGB (sfc->format, _FontColorKey.r, _FontColorKey.g, _FontColorKey.b));

    rect.x = (x == -1) ? (_nScreenW - sfc->w) >> 1 : x; //-1 = zentrieren
    rect.y = (y == -1) ? (_nScreenH - sfc->h) >> 1 : y; 
    rect.w = sfc->w; 
    rect.h = sfc->h;

    TTF_CloseFont(font);

    SDL_BlitSurface(sfc, NULL, _screenSurf, &rect);
    SDL_FreeSurface(sfc);
}

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dr.hallo« (04.07.2011, 17:46)


2

04.07.2011, 18:00

Hallo,

und wie hast du das probiert? Vielleicht zeigst du uns lieber mal den Quellcode der nicht funktioniert bzw. erklärst was genau nicht funktioniert hat.

Gruß
SaRu_

3

04.07.2011, 18:34

sry, ich hab das problem gerade eben selbst lösen können. wahrscheinlich hab ich
beim letzten mal irgendwie die reihenfolge von initialisieren, öffnen und rendern durcheinander
gebracht. so geht's (logisch)..

C-/C++-Quelltext

1
2
3
4
5
6
7
8
//1.z.b. in main()..
TTF_Init();
//2. erzeugen im konstruktor
_font = TTF_OpenFont(FONT_01, 20);
//3. In der Funktion drauf zugreifen
TTF_RenderText_Shaded(_font, text.c_str(), color, _FontColorKey);
//4. freigeben im destruktor oder sonstwo..
TTF_CloseFont(_font);


kritik ist weiterhin willkommen, falls das so nicht ok ist , oder falls es an der funktion noch was zu optimieren gibt

Werbeanzeige