我正在pygame中的一个项目上工作,文本应该显示角色的演讲。我已经显示了文本,但它从屏幕上跑掉了。我尝试了一种文本换行方式,但它没有移动到下一行,所以它只是重叠在同一行上。我不知道是否有一些边界或边框我可以设置或文本换行。我只能找到python的东西,而不是pygame。
这是我为文本 设置的white = (255,255,255)
def text_objects(text, font):
textSurface = font.render(text, True, white)
return textSurface, textSurface.get_rect()
def words(text):
largeText = pygame.font.Font('freesansbold.ttf', 18)
TextSurf, TextRect = text_objects((text), largeText)
TextRect = ((13), (560))
screen.blit(TextSurf, TextRect)
` pygame.display.update()
words("This is just filler. Yup, filler to test if this will run off the screen. And apparently n doesn't start a new line... Doo duh doo. Bum Dum pssst.")
我之前的方法是使用texttrap将长字符串分割成适合一行的字符串。然后我用不同的y值对它们进行bli。要分割文本,可以这样做:
import textwrap
sentence = "This is just filler. Yup, filler to test if this will run off the screen. And apparently doesn't start a new line... Doo duh doo. Bum Dum pssst."
characters_in_a_line = 60
lines = textwrap.wrap(sentence, characters_in_a_line , break_long_words=False)
输出:
['This is just filler. Yup, filler to test if this will run', "off the screen. And apparently doesn't start a new line...", 'Doo duh doo. Bum Dum pssst.']
然后我使用一个单独的函数来创建文本矩形,这些矩形被位进主屏幕:
def create_text(self, text, font, color, x, y):
text = font.render(text, True, color)
rect = text.get_rect()
rect.topeleft = (x, y)
self.screen.blit(text, rect)
你只需要知道你的文本有多高,并为lines
中文本的每个部分发送不同的y值。