编辑:尽管问题仍然存在,但我还没有能够经常重现它以更仔细地检查它。请参见问题结尾处的更多信息。
我是一名有用的助手,可以为您翻译文本。
我开始制作一个游戏,目前正在编写其基本库。我使用D编程语言与SDL-2和OpenGL 3(使用Derelict3绑定),在Linux Mint 13(Maya)上进行开发。编译器是DMD64 D编译器v2.067.1,每次都使用“rdmd”重新构建二进制文件。
为了呈现(更改)文本,我按需创建字形。我使用的代码片段如下:
class Font {
...
Texture render(char c) {
if(!(c in rendered)) rendered[c] = texture(to!string(c));
return rendered[c];
}
Texture texture(string text) {
SDL_Color color={255, 255, 255, 255};
auto bitmap = TTF_RenderText_Blended(
font,
std.string.toStringz(text),
color
);
if(!bitmap) {
throw new TTFError(
"TTF_RenderText_Blended: " ~
to!string(TTF_GetError()) ~ ": '" ~ text ~ "'"
);
}
auto texture = new Texture(bitmap);
SDL_FreeSurface(bitmap);
return texture;
}
问题在于这种失败是纯随机的。有时候它可以毫无问题地工作。当它无法呈现字形时,有趣的是它会一次又一次地无法呈现相同的字形。以下是一个例子,当捕捉到我抛出的异常时:
...
TTF_RenderText_Blended: Text has zero width: '9'
TTF_RenderText_Blended: Text has zero width: '6'
TTF_RenderText_Blended: Text has zero width: '9'
TTF_RenderText_Blended: Text has zero width: '6'
TTF_RenderText_Blended: Text has zero width: '9'
TTF_RenderText_Blended: Text has zero width: '6'
...
我正在将分数打印到屏幕上,除了其中几个数字之外,其他数字都正常显示。TTF_RenderText_Blended无法渲染的数字因每次运行而异,并且有时会渲染所有数字,如前所述。
一个细节是,在进入游戏循环之前呈现的静态字符串尚未无法呈现,只有用于更改文本的单个字母。
我已经没有任何想法,并且在搜索网络时没有找到与此问题相关的任何内容。非常感谢任何寻找解决方案的想法。
当前情况:我已将编译器更新至DMD 2.067.1版本,但问题仍然存在(迄今为止使用的编译器版本为2.066.1和2.067.1)。整个项目组目前都在github上。
https://github.com/mkoskim/games
文本字形渲染函数位于此文件中:
https://github.com/mkoskim/games/blob/master/engine/ext/font.d
...并且它是从这里使用的:
https://github.com/mkoskim/games/blob/master/engine/ext/gui/label.d
问题主要/最常发生在吃豆人游戏中(尽管现在很少发生):https://github.com/mkoskim/games/tree/master/testbench/pacman
如果您想尝试它,请先阅读(希望足够完整的)安装说明:https://github.com/mkoskim/games/blob/master/INSTALL
该项目适用于64位Linux Mint Maya,目前在构建方面不够用户友好且不易移植。Pacman是唯一一个(有望)在没有游戏控制器的情况下工作的演示。成功安装所需的库和工具后,您可以使用以下命令构建它:games/testbench/pacman$ make default
if(!(c in rendered)) rendered[c] = texture(std.string.format(" %c ", c));
,第一次测试运行给了我无尽的列表:...TTF_RenderText_Blended: Text has zero width: ' 7 '...
- MaKo