九歌当下 发表于 2023-10-8 13:11:10

pygame中文本如何换行

import pygame
pygame.init()
screen = pygame.display.set_mode((400, 300))
font = pygame.font.Font(None, 32)
text = "Hello, this is a long message that needs\n to be split into multiple lines"
rendered_text = font.render(text, True, (255, 255, 255))
screen.blit(rendered_text, (50, 50))
while True:
    for event in pygame.event.get():
      if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
    pygame.display.update()


自己写了一段代码,发现"/n"换行符没有效果{:10_266:}

isdkz 发表于 2023-10-8 13:12:19

在Pygame中,使用换行符"\n"无法直接实现文本的换行效果。Pygame中的文本渲染是基于位图的,因此无法直接解析换行符。但是,我们可以手动实现文本的换行。下面是修改后的代码示例:

import pygame
pygame.init()
screen = pygame.display.set_mode((400, 300))
font = pygame.font.Font(None, 32)
text = "Hello, this is a long message that needs to be split into multiple lines"
lines = []
words = text.split(" ")

current_line = words
for word in words:
    rendered_word = font.render(word, True, (255, 255, 255))
    if rendered_word.get_width() + font.render(current_line + " " + word, True, (255, 255, 255)).get_width() < 400:
      current_line += " " + word
    else:
      lines.append(current_line)
      current_line = word

lines.append(current_line)

y = 50
for line in lines:
    rendered_line = font.render(line, True, (255, 255, 255))
    screen.blit(rendered_line, (50, y))
    y += rendered_line.get_height()

while True:
    for event in pygame.event.get():
      if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
    pygame.display.update()


在这个修改后的代码中,我们首先将文本按空格分割成单词,并使用一个 lines 列表来存储每一行的文本。

然后,我们使用一个循环来遍历每一个单词。对于每一个单词,我们检查将当前行与该单词连接起来后的宽度是否小于400像素(屏幕宽度)。如果小于,则将该单词添加到当前行。如果大于等于,则将当前行添加到 lines 列表中,并将当前行设置为该单词。

最后,我们使用一个循环来绘制每一行的文本,并根据每一行的高度进行垂直位置的调整。

这样,就实现了在Pygame中的文本换行效果。

九歌当下 发表于 2023-10-8 13:19:03

isdkz 发表于 2023-10-8 13:12
在Pygame中,使用换行符"\n"无法直接实现文本的换行效果。Pygame中的文本渲染是基于位图的,因此无法直接解 ...

谢谢了,但我是想制作一个可以人为在文本里标记,进行分行的函数

Mike_python小 发表于 2023-10-8 18:05:51

九歌当下 发表于 2023-10-8 10:19
谢谢了,但我是想制作一个可以人为在文本里标记,进行分行的函数

了解你的需求,你可以创建一个函数来处理文本中的换行符,并将文本分成多行。然后,你可以逐行渲染文本并在屏幕上绘制。以下是修改后的代码:


import pygame
import sys

pygame.init()
screen = pygame.display.set_mode((400, 300))
font = pygame.font.Font(None, 32)
text = "Hello, this is a long message that needs\n to be split into multiple lines"

def draw_multiline_text(text, font, color, x, y):
    lines = text.split('\n')
    for i, line in enumerate(lines):
      rendered_text = font.render(line, True, color)
      screen.blit(rendered_text, (x, y + i * font.get_height()))

draw_multiline_text(text, font, (255, 255, 255), 50, 50)

while True:
    for event in pygame.event.get():
      if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
    pygame.display.update()


在这个代码中,我们创建了一个名为 `draw_multiline_text` 的函数,它接受文本、字体、颜色和起始坐标作为参数。函数首先将文本按换行符(`\n`)分割成多行。然后,对于每一行,我们使用 `font.render()` 方法渲染文本,并使用 `screen.blit()` 方法将其绘制在屏幕上。注意,我们根据当前行的索引和字体高度调整了每行文本的垂直位置。

现在,当你运行这个代码时,文本中的换行符应该能正确地将文本分成多行。
页: [1]
查看完整版本: pygame中文本如何换行