如何制作字体表(用于Python Roguelike)

2 投票
1 回答
1627 浏览
提问于 2025-04-17 18:35

我在制作我的Python Roguelike游戏上继续取得进展,并深入学习了这个教程:http://roguebasin.roguelikedevelopment.org/index.php?title=Complete_Roguelike_Tutorial,_using_python%2Blibtcod。我还制作了一个自己的字体来在这个游戏中使用,但我不太确定该怎么做。这里是我目前使用的字体图片的链接:https://i.stack.imgur.com/1GYwt.png。在Python代码中,它把自定义字体设置为'arial10x10.png',也就是那张字体图片。我尝试用自己的字体制作一张图片,但结果变得很扭曲。

有没有人知道我该如何使用自己的字体?另外,我在使用libtcod,而我只有自己的字体是.ttf格式的。谢谢。

1 个回答

4

要把你的TrueType字体按照libtcod的要求渲染成位图,你需要使用一个单独的库——字体渲染其实是个挺复杂的事情。FreeType是一个非常流行的开源字体渲染库。你可以在这里找到它的Python接口:http://code.google.com/p/freetype-py/。你只需要在开发你的roguelike游戏时用到FreeType,而不是在实际游戏中。

首先,确定你在roguelike游戏中会使用哪些字符。然后决定这些字符在字体表上的布局。你也可以选择使用你发布的图片中的相同布局——那是一张有32列的表,从空格字符(字符32)开始。

使用你的字体渲染库,单独渲染每个字符,设置你想要的大小。注意每个字符生成的大小——比如,'.'会比较小,而'w'会比较大,即使它们的字体大小相同。你不仅要计算高度,还要计算基线以上和基线以下的高度。(例如:如果'A'和'g'都是16像素高,可能你仍然需要一个比16像素高的矩形来正确对齐它们——基线到基线。)找出一个能容纳所有这些大小的最小矩形尺寸——这就是你字体表中每个单元格的大小。

一旦你知道了字体表的大小,就可以再次遍历所有需要的字母,构建你的位图,把每个字母放到它的单元格里。在y轴定位方面,所有的基线必须对齐。如果某些字符比其他字符宽,你可以选择把每个字符居中或左对齐在它的单元格内。(这两种方式各有自己的特点——对于roguelike游戏,你真的会想要使用等宽字体。)

额外的小贴士:

  • 使用抗锯齿。这会让你的字体看起来比纯黑白更舒服。
  • 不要使用颜色,把你的字体渲染成灰度。libtcod有功能可以从你的灰度字体表生成彩色文本。
  • 考虑一下你是否想要方形字体。方形字体的好处是你roguelike世界里的“圆圈”在屏幕上看起来也会是圆圈。缺点是方形字体通常“更丑”,而且更难阅读。

撰写回答