鱼C论坛

 找回密码
 立即注册
查看: 3027|回复: 3

[已解决]pygame中文本如何换行

[复制链接]
发表于 2023-10-8 13:11:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. import pygame
  2. pygame.init()
  3. screen = pygame.display.set_mode((400, 300))
  4. font = pygame.font.Font(None, 32)
  5. text = "Hello, this is a long message that needs\n to be split into multiple lines"
  6. rendered_text = font.render(text, True, (255, 255, 255))
  7. screen.blit(rendered_text, (50, 50))
  8. while True:
  9.     for event in pygame.event.get():
  10.         if event.type == pygame.QUIT:
  11.             pygame.quit()
  12.             sys.exit()
  13.     pygame.display.update()
复制代码


自己写了一段代码,发现"/n"换行符没有效果
最佳答案
2023-10-8 18:05:51
九歌当下 发表于 2023-10-8 10:19
谢谢了,但我是想制作一个可以人为在文本里标记,进行分行的函数

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


  1. import pygame
  2. import sys

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

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

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

  13. while True:
  14.     for event in pygame.event.get():
  15.         if event.type == pygame.QUIT:
  16.             pygame.quit()
  17.             sys.exit()
  18.     pygame.display.update()
复制代码


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

现在,当你运行这个代码时,文本中的换行符应该能正确地将文本分成多行。

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-10-8 13:12:19 | 显示全部楼层
在Pygame中,使用换行符"\n"无法直接实现文本的换行效果。Pygame中的文本渲染是基于位图的,因此无法直接解析换行符。但是,我们可以手动实现文本的换行。下面是修改后的代码示例:

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

  8. current_line = words[0]
  9. for word in words[1:]:
  10.     rendered_word = font.render(word, True, (255, 255, 255))
  11.     if rendered_word.get_width() + font.render(current_line + " " + word, True, (255, 255, 255)).get_width() < 400:
  12.         current_line += " " + word
  13.     else:
  14.         lines.append(current_line)
  15.         current_line = word

  16. lines.append(current_line)

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

  22. while True:
  23.     for event in pygame.event.get():
  24.         if event.type == pygame.QUIT:
  25.             pygame.quit()
  26.             sys.exit()
  27.     pygame.display.update()
复制代码


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

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

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

这样,就实现了在Pygame中的文本换行效果。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

谢谢了,但我是想制作一个可以人为在文本里标记,进行分行的函数
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-8 18:05:51 | 显示全部楼层    本楼为最佳答案   
九歌当下 发表于 2023-10-8 10:19
谢谢了,但我是想制作一个可以人为在文本里标记,进行分行的函数

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


  1. import pygame
  2. import sys

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

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

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

  13. while True:
  14.     for event in pygame.event.get():
  15.         if event.type == pygame.QUIT:
  16.             pygame.quit()
  17.             sys.exit()
  18.     pygame.display.update()
复制代码


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

现在,当你运行这个代码时,文本中的换行符应该能正确地将文本分成多行。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-24 11:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表