我有一个呈现文本的文本函数。
def textFunc(font,msg,color,x,y,center):
text_render = font.render(msg,True,color)
text_rect = text_render.get_rect()
#If center is true, then the X,Y will be used as the center
if center == True:
text_rect.center = (x,y)
else:
text_rect = (x,y)
game_display.blit(text_render,text_rect)
字符串
然而,我的msg字符串太长,它将呈现在窗口之外。
有没有一种方法可以让我的文本在我的窗口中注册太长,所以在文本的开头下面继续注册?类似于计算机自动注册的方式。
例如:
3条答案
按热度按时间bybem2ql1#
没有自动的解决方案。你必须自己实现文本换行,并逐行逐词地绘制文本。
幸运的是PyGame wiki提供了一个函数来完成这个任务。参见PyGame wiki Simple Text Wrapping for pygame。
我扩展了这个函数,并添加了一个额外的参数,它提供了 * 左 * 或 * 右 * 对齐的文本,* 居中 * 的文本甚至 * 块 * 模式:
字符串
最小示例:
repl.it/@Rabbid76/PyGame-TextWrap
型
e3bfsja22#
从
pygame-ce
(pygame
的现代分支)版本2.1.4
pygame.Font.render
开始,现在支持换行符("\n"
)和换行长度(换行前的像素宽度)。因此,您只需将想要的文本传递给
pygame.Font.render
,并指定窗口宽度作为最后一个参数,以便在文本达到窗口宽度时自动换行。由于此方法还不接受关键字参数,因此您还必须提供背景颜色参数,它可以是None
,也可以提供alpha值为0的颜色值。下面是一个简短的代码示例:
字符串
结果:
x1c 0d1x的数据
此外,要安装最新版本的
pygame-ce
,只需按照以下步骤操作:pip uninstall pygame
(为了避免冲突,只有在已经安装了pygame
的情况下才必须这样做)pip install pygame-ce
个1.享受新的和闪亮的功能
关于分叉的更多信息可以在这里找到:Pygame: Community Edition Announcement您也可以加入pygame的官方discord服务器(-ce):https://discord.gg/pygame
fv2wmkja3#
我不喜欢把简单的事情搞得复杂化,最好的解决方案在文档中,顺便说一句,
pygame.freetype
模块是pygame.font
的替代品。字符串
就是这样。例如:
型
通过导入
pygame.freetype
,pg.init()
将负责初始化,否则您也需要初始化ft,因此只需导入它。您可能还想知道当text = None时文本是如何呈现的。这是因为我们重新呈现传递给bounds = self.font.get_rect(word)
的文本