SDL + SDL_TTF: как вы визуализируете текст в SDL+SDL_TTF? (С++)

У меня были большие проблемы с попыткой отобразить текст в SDL с TTF в окно SDL. Я немного новичок в С++ и хотел бы, чтобы это было объяснено немного «новичком». (с некоторым примером кода, если возможно?)

Спасибо!


person Lemmons    schedule 30.08.2010    source источник
comment
Что вы пробовали? Что у вас есть (по коду)? Что не сработало?   -  person genpfault    schedule 31.08.2010
comment
Черт, я даже не понимаю свой собственный код больше. Но примерно так: SDL_Color fontcolor = {fgR,fgG,fgB,fgA}; SDL_Color fontbgcolor = {bgR, bgG, bgB, bgA}; SDL_Surface* текст; если (качество == сплошной) результирующий_текст = TTF_RenderText_Solid(fonttodraw, text, fontcolor); иначе если (качество == затененный) результирующий_текст = TTF_RenderText_Shaded (fonttodraw, текст, цвет шрифта, цвет шрифта); иначе если (качество == смешанный) результирующий_текст = TTF_RenderText_Blended(fonttodraw, text, fontcolor); возвращаемый текст;   -  person Lemmons    schedule 01.09.2010
comment
Взгляните на lazyfoo.net/SDL_tutorials/lesson07/index.php.   -  person Adam    schedule 01.09.2010
comment
Теперь lazyfoo.net/tutorials/SDL/16_true_type_fonts/index.php   -  person bobobobo    schedule 28.10.2014


Ответы (1)


Вот простой пример. Убедитесь, что в вашем каталоге есть arial.ttf или выбранный вами шрифт truetype. Вам нужно будет связать с -lSDL -lSDL_ttf.

#include "SDL.h"
#include "SDL_ttf.h"

SDL_Surface* screen;
SDL_Surface* fontSurface;
SDL_Color fColor;
SDL_Rect fontRect;

SDL_Event Event;

TTF_Font* font;

//Initialize the font, set to white
void fontInit(){
        TTF_Init();
        font = TTF_OpenFont("arial.ttf", 12);
        fColor.r = 255;
        fColor.g = 255;
        fColor.b = 255;
}

//Print the designated string at the specified coordinates
void printF(char *c, int x, int y){
        fontSurface = TTF_RenderText_Solid(font, c, fColor);
        fontRect.x = x;
        fontRect.y = y;
        SDL_BlitSurface(fontSurface, NULL, screen, &fontRect);
        SDL_Flip(screen);
}

int main(int argc, char** argv)
{
    // Initialize the SDL library with the Video subsystem
    SDL_Init(SDL_INIT_VIDEO | SDL_INIT_NOPARACHUTE);

    //Create the screen
    screen = SDL_SetVideoMode(320, 480, 0, SDL_SWSURFACE);

    //Initialize fonts
    fontInit();

    //Print to center of screen
    printF("Hello World", screen->w/2 - 11*3, screen->h/2);

    do {
        // Process the events
        while (SDL_PollEvent(&Event)) {
            switch (Event.type) {

                case SDL_KEYDOWN:
                    switch (Event.key.keysym.sym) {
                    // Escape forces us to quit the app
                        case SDLK_ESCAPE:
                            Event.type = SDL_QUIT;
                        break;

                        default:
                        break;
                    }
                break;

            default:
            break;
        }
    }
    SDL_Delay(10);
    } while (Event.type != SDL_QUIT);

    // Cleanup
    SDL_Quit();

    return 0;
}
person Error 454    schedule 02.09.2010