SDL + SDL_TTF:如何在 SDL+SDL_TTF 中呈现文本? (C++)

发布于 2024-09-16 18:31:10 字数 109 浏览 4 评论 0原文

我在尝试使用 TTF 将 SDL 中的文本渲染到 SDL 窗口时遇到了很多麻烦。我对 C++ 有点陌生,希望以一种“新手”的方式来解释这一点。 (如果可能的话,有一些示例代码吗?)

谢谢!

I've been having a lot of trouble trying to render text in SDL with TTF to an SDL window. I'm a little new to C++ and would like this explained in a bit of a 'newbie' way. (with some example code, if possible?)

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

蝶舞 2024-09-23 18:31:10

这是一个简单的例子。确保您的目录中有 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;
}

Here is a simple example. Make sure that you have arial.ttf, or your truetype font of choice in your directory. You will need to link with -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;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文