编辑使用TTF_RenderText生成的表面?

问题描述 投票:0回答:1

我正在尝试使用 SDL2 制作菜单。我有几个由一些指示性单词组成的项目,我使用 TTF_RenderText_Blished 将它们制作成表面,然后通过 SDL_CreateTextureFromSurface 将它们制作成纹理,然后将它们全部显示在一列中,一个在另一个下面。这工作正常,但为了交互性,我想通过在每个项目中的相应字符下划线来明确每个项目的键盘快捷键。

这是我的代码:

int char_w,char_h; TTF_SizeText(font, "C", &char_w,&char_h);
...
s_item =TTF_RenderText_Blended(font, ">  New game", RED);
SDL_Rect r =(SDL_Rect){char_w*3,char_h-5,char_w,3};
SDL_FillRect(s_item, &r, 79);
items[n]->t =SDL_CreateTextureFromSurface(renderer, s_item);

我认为实现我想要的效果的最简单方法是在我感兴趣的角色下方在我的表面上绘制一个细长的矩形,然后将其制作成纹理。

但是,这不起作用,文本显示在屏幕上,但没有下划线。

我尝试了各种其他方法,在我看来毫无用处,例如创建纹理,将渲染目标设置为该纹理并绘制一条线,或者将两个表面位图传输在一起,但无济于事。

可能相关,但我不明白建议的解决方案。

c++ sdl-2 sdl-ttf
1个回答
0
投票

TTF_RenderText_Blished 返回新的 32 位 ARGB 表面。调用 SDL_FillRect 时,如果颜色值包含 Alpha 分量,则目标仅用该 Alpha 信息填充,不会发生混合。

我的假设是,由于您传递

79
作为颜色(在 ARGB 格式中只是深蓝色),因此不考虑 alpha 分量,并且目标保持其透明度。

尝试使用

0x4F000000
作为颜色。

© www.soinside.com 2019 - 2024. All rights reserved.