如何更好地渲染描边字体?

7
我正在使用pygame写一个游戏,需要将文字渲染到屏幕上。我想要用一种颜色并带有轮廓来呈现这个文字,以便不必担心文字被放在什么样的背景上显示。但是pygame.font似乎没有直接支持这种操作的功能,我想知道是否有人有好的解决方案?

我已经接受了一个答案,但我仍然对可能存在的其他解决方案感兴趣。 - SpoonMeiser
与 https://dev59.com/KGsz5IYBdhLWcg3wNVES 相关的内容。 - jdhao
2个回答

4
一个快速而简单的方法是将文本用轮廓颜色多次渲染,通过在文本位置周围的圆上微小移动来完成:
          1
       8  |  2
        \ | /
         \|/
     7----*----3
         /|\
        / | \ 
       6  |  4
          5
编辑:哦,你已经更快了!不过我不会删除我的答案,因为这个ASCII艺术实在是太好了,值得继续存在! 编辑2:如OregonGhost所提到的,您可能需要根据轮廓宽度调整轮廓渲染的步骤数。

请查看我在Nick D.的答案下的评论,同样适用于这个问题。 - OregonGhost

3

我可以给你一个快速但不太好的解决方案:

打印文本8次,以包围它,再加上一次为内部文本,就像这样

UUU
UIU
UUU

U代表外部颜色,I代表内部颜色。


1
实际上,如果轮廓线不超过一个像素宽,四次(角落)就足够了。两个像素也可以。这取决于字体渲染器的速度,解决方案有多糟糕。我在XNA中使用它,那里的速度相当快,至少如果文本是批量渲染的话。 - OregonGhost
你只需要渲染字体一次。你可以重复使用渲染后的表面,每次将其传输到目标表面时都可以这样做。 - SingleNegationElimination
TokenMacGuy,这正是我在我的演示游戏中所做的(已经完成)。我在单独的表面上预渲染了字体。好的提示2!当然,如果您在屏幕上不显示太多文本,则不会看到帧速率的任何差异。 - Nick Dandoulakis
@TokenMacGuy 使用pygame.font接口,我认为我需要将字体渲染两次;每次使用不同的颜色。 - SpoonMeiser

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