如何制作字体表(用于python roguelike)

时间:2013-03-10 16:19:06

标签: python fonts roguelike

我继续在我的python roguelike上取得进展,并进一步深入本教程:http://roguebasin.roguelikedevelopment.org/index.php?title=Complete_Roguelike_Tutorial,_using_python%2Blibtcod。我也在这个游戏中使用了我自己的字体,但我不知道该怎么做。这是我正在使用的字体图片的链接:http://i.imgur.com/j6FdNky.png。在python代码中,它将自定义字体设置为'arial10x10.png',即该字体图像。我尝试用我自己的字体制作图像,但它确实变形了。

有谁知道我如何实现自己的字体?另外,我正在使用libtcod,而我只有.ttf格式的自己的字体。 感谢。

1 个答案:

答案 0 :(得分:4)

要以libtcod期望的方式将TrueType字体呈现为位图,您应该使用单独的库 - 字体呈现是一项非常复杂的任务。 FreeType是一种非常流行的字体渲染开源库。您可以在此处找到Python界面:http://code.google.com/p/freetype-py/。您只需要在开发roguelike时使用的工具中使用FreeType,而不是在实际游戏中使用。

首先,确定您将在roguelike中使用的字符。确定如何在字体表上布置这些字符。您也可以选择使用与您发布的图像中相同的布局 - 这是一个包含32列的工作表,从空格字符(字符32)开始。

使用字体渲染库,以所需大小自行渲染每个字符。注意为每个生成的大小 - 例如,'。'即使在相同的字体大小,它也会很小并且'w'会很大。您不仅要计算高度,还要计算基线以上的高度和基线以下的高度。 (例如:如果'A'和'g'都是16像素高,你可能仍然需要一个高于16像素的矩形才能在其中正确对齐 - 基线到基线。)找到最小的矩形容纳所有这些尺寸的尺寸 - 这是字体表中每个单元格的大小。

一旦您知道了工作表的大小,再次通过所有想要的字母来构建您的位图,将每个字母放在其单元格中。就y定位而言,所有基线必须对齐。如果某些字符比其他字符宽,则可以选择居中或左对齐其单元格中的每个字符。 (其中每一个都有它自己的怪异 - 你真的想要一个roguelike的固定宽度字体。)​​

其他提示:

  • 使用抗锯齿。这样可以使你的字体比纯净更容易 单色。
  • 请勿使用颜色,以灰度渲染字体。 libtcod有 从灰度生成彩色文本的功能 fontsheet。
  • 考虑您是否需要方形字体。一个的优点 方形字体是你的roguelike世界中的“圆圈”看起来像 屏幕上的圆圈。缺点是方形字体是 通常“丑陋”,更难阅读。