问题标签 [sdl-ttf]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
181 浏览

c++ - 在使用其他图形时使用 SDL_ttf 绘制文本

我正在使用 SDL 制作这个游戏,我需要能够为变量和信息等显示文本。问题是我无法渲染任何文本,而 SDL_OPENGL 是 SDL_SetVideoMode() 中的参数。

没有它可以完美地工作,但我无法渲染我的任何图形。显然我需要两者,我宁愿不去为文本绘制图像。

TL;DR 我需要在不从 SDL_SetVideoMode(SCREEN_WIDTH,SCREEN_HEIGHT,32,SDL_SWSURFACE | SDL_OPENGL) 中删除 SDL_OPENGL 的情况下绘制文本;

如果有帮助,我正在使用 C++ 和 code::blocks。还需要什么其他信息吗?

0 投票
2 回答
2100 浏览

c++ - Make_Pair 标识符在一个函数中未找到,但在另一个函数中找到

我正在尝试用 SDL_ttf 制作字体字典,就像我用 SDL_image 制作字典一样。由于字体是用 a 存储的,所以pnt_size我制作了一个包含以下信息的结构:

其次是两个字典:

两者的区别在于字体字典不仅需要包含文件的字符串,还需要包含字体的大小。

然后,当对象请求图像或字体时,它会为其调用get函数。现在getSprite工作正常:

getFont方法几乎相同,除了它使用 afontinfo而不是 a string

编译器告诉我identifier not found并且make_pair未定义,但仅适用于make_pairfrom 的函数getFontmake_pairin没有问题getSprite

0 投票
1 回答
2492 浏览

opengl - OpenGL,SDL_ttf

我无法通过 SDL_ttf 在 OpenGL 中显示文本。我编写了 LoadFont() 函数来加载字体并制作 OpenGL 纹理。

我在 initGL() 中使用了这个函数:

此外,我尝试在多边形上显示此文本:

但文字不显示,只有白色多边形。

0 投票
1 回答
1153 浏览

c++ - TTF_RenderUTF8_Blended 渲染彩色文本

我正在尝试使用 SDL_ttf 和 openGL 呈现文本。

我打开字体并将文本渲染到 SDL_Surface,然后将该表面附加到纹理并将其绑定以供 openGL 渲染。

我已经用谷歌搜索了这个问题,但没有得到很多点击,这会让我相信我理解了一些东西。

唯一重要的两个函数,因为我几乎制作了一个临时变量来解决这个问题。他们是:

这使用 SDL_ttf 将文本呈现到 Surf_Text 表面。你可以看到我已经最大化了蓝色通道。我一会儿再谈这个。这里是渲染

好吧,据我所知,问题可能来自当前的颜色状态和纹理环境模式。

当我以这种方式渲染文本时,文本会改变颜色,但就像 R 和 B 通道已经切换一样。如果我制作红色 255,则文本为蓝色,如果我制作蓝色 255,则文本为红色。绿色保持绿色(RGB vs BGR?)。

如果我删除glColor4f渲染函数中的调用,则文本根本拒绝渲染彩色。总是黑色(我习惯性地将颜色设置回(0,0,0),每次我渲染一些东西,所以可能因为模式是调制(R = 0 * Texture(Font)R等)所以它会是黑色的。有道理.

如果我将 Texture 环境设置为 DECAL,则文本呈现黑色,文本后面的框呈现我试图呈现文本的颜色。

我想我只是不知道这样做的正确方法。有人对 SDL_ttf 和 openGL 纹理环境有任何经验,可以提供一些想法吗?

编辑:

我已经对函数进行了一些重写并测试了表面,并最终弄清楚了一些事情。如果我使用 GL_DECAL 文本呈现正确的颜色,并且像素值在表面上的任何地方都为 0 我尝试渲染的不是红色(渲染值为 255,这很奇怪,因为红色是它应该的第一个通道至少我期望的是 255^3(或以十六进制 FF0000 表示)。使用 DECAL,alpha 空间(文本周围的空白区域,像素值为 0)显示当前 glColor() 调用的颜色。如果我使用混合,则 alpha 区域会消失,但我的文本也会呈现为混合(当然),因此它与底层背景纹理混合。

我想更合适的问题是如何只混合空白而不是文本?我的猜测是我可以调用一个新的 glBlendFunc(); 但我已经测试过参数,我就像树林里的孩子。不知道如何获得所需的结果。

解决方案尚未完全验证,但表面的格式确实是 BGRA 但我无法实现此更正。我将尝试为此创建一个颜色交换功能。

此修复无效。我没有设置 BGR,而是想创建一个新的 RGB 表面:

在那之后失败了,我尝试交换Surface->format->BmaskSurface->format->Rmask但这也没有效果。

0 投票
2 回答
688 浏览

sdl - SDL TTF_OpenFont 在第二次尝试时返回 NULL

我正在尝试使用以下代码将字体两次加载到不同的 TTF_Fonts (用于不同的大小)中:

第一个将加载,但第二个返回 null。我调用它们的顺序无关紧要,总是第二个失败。为什么是这样?

0 投票
1 回答
3642 浏览

c++ - 让 SDL_ttf 与 SDL2 配合得很好

我最近开始从使用 SDL (1.2.15) 迁移到 SDL2 (2.0.0),之前依赖于使用扩展库 SDL_ttf (2.0.11) 来渲染字体。当我尝试使用与版本一 SDL 和 SDL2(诚然尚未正式发布)一起使用的相同文本库时,它编译得很好。但是,当我运行可执行文件时(我目前正在使用 VS2012 for Desktop),我收到以下错误:

据我所知,这是由于以下代码。我创建了一个 Window 类来封装一些常用的 SDL 函数:

窗口.cpp:

它被绊倒了

行,其中创建的 SDL_Surface 与 SDL2 的 Surfaces 定义不兼容,因此当它尝试将 SDL_Surface 转换为 SDL_Texture 时,它​​会翻转。

我不认为我是唯一遇到此问题的人,那么是否有解决此问题的 SDL_ttf 的解决方法/更新版本,或者我应该推迟到 SDL2 直到我可以让字体工作?

0 投票
1 回答
1296 浏览

sdl - 如何在 CodeBlocks 中设置其他 SDL 库?

我想设置 SDL_Image、SDL_Mixer 和 SDL_TTF,但它似乎不起作用。我正在关注 Lazy Foo 的 SDL 教程,并尝试按照他所说的进行设置,但它不起作用。我将所有包含文件放入包含文件夹,并将所有 lib 文件放入 lib 文件夹。我发现lib文件夹中有x86和x64文件夹。当我尝试 x64(因为我有一个 64 位系统)时,一切正常,CodeBlocks 甚至告诉我建议(比如当我写“img”时,它显示了一个建议“IMG_Load”,但是当我开始编译我的代码时,发生这种情况:http://puu.sh/3Eqa5.png当我尝试使用 x86 版本时,它不起作用,因为弹出了一些 SDL.exe 错误。

我真的不知道是什么问题!任何人都可以帮忙吗?

0 投票
2 回答
10024 浏览

sdl - 如何使用 SDL-TTF 进行换行和换行?

我刚开始使用SDL2_ttf. 我已经想出了如何在屏幕上显示一些文本TTF_RenderText_Blended,但是我怎样才能让它进行换行和自动换行呢?

  1. 它似乎不支持\n;它只是创建一个空间而不是沿着一条线。有没有办法增加对此的支持?具体来说,使用文本的适当行高,而不是在不同的 Y 坐标处多次调用 RenderText。
  2. 给定一个 X、Y 坐标和一个宽度,我怎样才能让它在达到该宽度时自动下降一行(在单词之间中断)?
0 投票
1 回答
825 浏览

c# - 如何计算每对字母的字距?

这些文档说:

目前没有从 SDL_ttf 中检索一对字符的字距调整的方法,但是当呈现文本字符串而不是单个字形时,将应用正确的字距调整。

但是,我想事先将所有字形渲染到纹理,然后将它们单独渲染出来,这样我就不会一直重新创建纹理。

使用TTF_GlyphMetrics和朋友,我可以获得除字距调整之外的所有信息。

我不是字体专家,但这篇文章很好地解释了字距调整。据我了解,字距调整仅取决于两个相邻的字母,因此要获得整个字体的所有字距调整值,大约需要 26 个字母 * 2(上/下)+ ~10 个符号,平方 = 3844 个值 =大约 15 kB 的数据,看起来足够小,可以缓存。

那么,我怎样才能得到每对字母的字距呢?如果他们在内部这样做,那一定是可能的。

0 投票
1 回答
560 浏览

c++ - SDL C++ 程序在大约 12 秒后持续崩溃

我目前正在用 C++ 中的 SDL 制作一个简单的游戏。当我使用命令行在 Ubuntu 中编译和运行游戏时,游戏运行完美,没有任何问题。但是,当我尝试在 Windows 7 中使用 Codeblocks 编译相同的代码时,程序每次在大约 12 秒后崩溃。我已经使用 GDB 搜索了与内存相关的问题,并检查了所有资产(图像、音乐等)是否都在正确的目录中,但是没有任何东西可以帮助解决这个问题。在 Windows 中编译 SDL 或 C++ 代码时,我是否缺少一些在 Linux 中不需要的东西?

任何帮助是极大的赞赏。

这是我的代码的链接: https ://www.dropbox.com/s/gebuas2xc9esq82/src.zip

使用以下行仅编译 main.cpp 文件: g++ -o main main.cpp -lSDL -lSDL_image -lSDL_mixer -lSDL_ttf

您必须安装 SDL、SDL_image、SDL_mixer 和 SDL_ttf 才能编译此代码。