如何在SDL-TTF中进行换行和文本自动换行?

9
我刚开始使用SDL2_ttf。我已经通过TTF_RenderText_Blended搞定了在屏幕上显示一些文本,但是如何实现自动换行和自动换行呢?
  1. 它似乎不支持\n;它只会创建一个空格而不是换行。有没有办法添加对此的支持?特别是使用文本的正确行高,而不是通过多次调用RenderText在不同的Y坐标上。
  2. 给定X、Y坐标和宽度,如何在达到该宽度时(在单词之间断开)使其自动换行?
2个回答

30

使用TTF_RenderText_Blended_Wrapped代替TTF_RenderText_Blended。它需要一个额外的参数:文本将在其后面断开换行的像素宽度。


那是标准库的一部分吗?我找不到任何关于它的文档。如果存在的话,那太好了。 - mpen
1
它在最新的SDL_ttf中。我找不到适当的文档(不知道为什么根本没有参考),但我可以向您保证它有效。 - Mars
必须在版本控制系统中,然后......在2.0.11源代码中不存在。嗯...刚刚下载了2.0.12,它在那里。太棒了。 - mpen
8
对于其他阅读此文的人:\n 也可以与 *_Wrapped 函数一起使用。 - mpen
3
如果你的文本没有空格,它就无法自动换行,这是一个问题。 - Stanley Bak
显示剩余2条评论

2

SDL_TTF不会自动换行,您需要自己编写。

TTF_Font* ttf;
TTF_SizeText(ttf, "Hello World", &w, &h);

此函数可获得字符串的宽度和高度。


我本来希望有更深入的内容,但我想我可以自己编写字体管理器类。 - mpen
如果您愿意,我可以试着写一些代码。C还是C++?我通常会将任何长消息拆分为几个短消息。 - parkydr
C#,实际上。我正在编写一个SDL2的包装器。您不需要编写任何代码,我只是想知道有哪些陷阱。目前我唯一无法弄清楚如何做到的是字距调整。 - mpen
SDL-TTF应该可以做到这一点,它使用比例字体。我只会使用TTF_SizeText来获取您添加的每个字符串的长度。 - parkydr
从我的测试来看好像不是这样的。如果你写了类似于“AVA”的东西,“V”应该会稍微覆盖在“A”的上面一点,但是看起来它们并没有重叠。也许我只是使用了一个糟糕的字体...需要更多的实验。 - mpen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接