0

我已经使用 SDL 进行了一段时间的开发,但我认为我需要另一个挑战。所以我决定使用 SDL_TTF 在屏幕上绘制一些文本。

我尝试在 0,0 处渲染文本,但它略低于屏幕边框。所以这意味着它没有在 0,0 处完全渲染。

此代码仅用于测试目的。

这是我当时用于测试的代码:

#include <SDL.h>
#include <SDL_ttf.h>
#include <iostream>

int main(int argc, char* args[])
{
SDL_Texture* tex;

SDL_Init(SDL_INIT_EVERYTHING);
SDL_Window *win = SDL_CreateWindow("Font drawing test", 100, 100, 640, 480, SDL_WINDOW_SHOWN);
SDL_Renderer *ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
TTF_Init();

while (true)
{
    SDL_RenderClear(ren);
    TTF_Font* font = TTF_OpenFont("./Resources/test.ttf", 72);
    SDL_Surface *surf = TTF_RenderText_Blended(font, "Test", SDL_Color{ 255, 255, 255, 255 });
    tex = SDL_CreateTextureFromSurface(ren, surf);
    SDL_RenderCopy(ren, tex, NULL, new SDL_Rect{ 0, 0, 100, 100 });
    SDL_RenderPresent(ren);
    SDL_DestroyTexture(tex);
    SDL_FreeSurface(surf);
    TTF_CloseFont(font);
}



SDL_DestroyTexture(tex);
SDL_DestroyRenderer(ren);
SDL_DestroyWindow(win);
SDL_Quit();
return 0;
}

这就是它在屏幕上的样子: 字体绘制位置

我该如何解决这个问题?

马可

4

1 回答 1

1

我想通过评论向您询问更多信息,至于我看来渲染工作正常。但是我不能写评论,因为我没有足够的声誉,如果我不回答,我永远不会获得足够的声誉来发表评论,所以无论如何我都会“回答”并希望网站版主在某个时候重新考虑为能够回答的问题询问更多信息的限制/要求(以获得足够的声誉以询问更多信息)。

就像说的那样,对我来说,渲染看起来还不错。“差距”来自字体指标。可以在这里找到某种介绍 TTF 字体指标,例如:

https://www.libsdl.org/projects/SDL_ttf/docs/SDL_ttf_38.html

http://chanae.walon.org/pub/ttf/ttf_glyphs.htm

我不确定是否可行,但您可能需要考虑在加载后调整指标,或者如果这不起作用,请使用更适合您目的的字体。

于 2014-12-19T15:34:02.260 回答