找不到在pygam中生成多行的方法

2024-03-29 12:28:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道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对它进行换行,但它不起作用,这就是我在这里的原因。你知道吗


Tags: 方法代码txttrueresponserender线程screen
1条回答
网友
1楼 · 发布于 2024-03-29 12:28:20

它不是不支持多行的Surface.blitblit只需在另一个Surface上画一个Surface,它并不关心Surface包含什么。你知道吗

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

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

因此,我不知道代码中的DisplayRoom.prompt是什么,但如果不是字符串,则肯定会失败:render引发TypeError: text must be a unicode or bytes
如果是一个带换行符的字符串,则换行符不会被呈现。你知道吗

必须拆分文本并分别渲染每一行。你知道吗

在下面的示例中,我创建了一个简单的函数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

相关问题 更多 >