鱼C论坛

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

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

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

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

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

x
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"换行符没有效果
最佳答案
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()` 方法将其绘制在屏幕上。注意,我们根据当前行的索引和字体高度调整了每行文本的垂直位置。

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

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[0]
for word in words[1:]:
    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中的文本换行效果。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

谢谢了,但我是想制作一个可以人为在文本里标记,进行分行的函数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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()` 方法将其绘制在屏幕上。注意,我们根据当前行的索引和字体高度调整了每行文本的垂直位置。

现在,当你运行这个代码时,文本中的换行符应该能正确地将文本分成多行。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-28 23:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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