gpt4 book ai didi

python - 找不到在 pygame 中制作多行的方法

转载 作者:行者123 更新时间:2023-12-01 00:45:43 28 4
gpt4 key购买 nike

我知道 pygame 的 screen.blit 并不意味着支持多行,但我无法找到解决方法。所有其他提出这个问题的线程都不适用于我的代码。我怎样才能做到这一点?

我尝试通过在 DisplayRoom.prompt 上使用 splitline() 将响应分成两部分,然后让游戏分别加载两行,但是 DisplayRoom.prompt.splitline() 不会将 `DisplayRoom.prompt 从元组转换为列表,并且仅返回它的值。

screen.fill(background_colour)
txt_surface = userfont.render(text, True, color)
screen.blit(txt_surface, (100, 800))
response = promptfont.render(DisplayRoom.prompt, True, color)
screen.blit(response, (80, 300))
pygame.display.flip()
clock.tick_busy_loop(60) # limit FPS

当我定义 DisplayRoom.prompt 时,我期望\n 对其进行换行,但它不起作用,这就是我在这里的原因。

最佳答案

它不是不支持多行的Surface.blitblit 只是在另一个 Surface 上绘制一个 Surface,它并不关心 Surface 包含什么。

这是 pygame.Font.render它不支持多行。文档明确指出:

The text can only be a single line: newline characters are not rendered.

所以我不知道您的代码中的 DisplayRoom.prompt 是什么,但如果不是字符串,必然会失败:render 引发 类型错误:文本必须是 unicode 或字节
如果是带有换行符的字符串,则不会呈现换行符。

您必须拆分文本并单独渲染每一行。

在下面的示例中,我创建了一个简单的函数 blitlines,它说明了您可以如何执行操作。

import sys
import pygame

def blitlines(surf, text, renderer, color, x, y):
h = renderer.get_height()
lines = text.split('\n')
for i, ll in enumerate(lines):
txt_surface = renderer.render(ll, True, color)
surf.blit(txt_surface, (x, y+(i*h)))


background_colour = (0, 0, 0)
textcolor = (255, 255, 255)

multitext = "Hello World!\nGoodbye World!\nI'm back World!"

pygame.init()
screen = pygame.display.set_mode((500, 500))
userfont = pygame.font.Font(None, 40)

screen.fill(background_colour)
blitlines(screen, multitext, userfont, textcolor, 100, 100)

pygame.display.flip()

#main loop
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()

这是屏幕上的结果。

sample image

关于python - 找不到在 pygame 中制作多行的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56998894/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com