pygame滚动对话文本

时间:2015-07-13 10:39:44

标签: text scroll pygame game-engine

我会创建一种"滚动对话"就像在旧点和点击。 我会尝试更好地解释一下:

我有以下文字:" Hello World"。 我会在屏幕上逐字打印:" H" (1秒后)" e" (1秒后)" l"等等。

我尝试这样做:

font = pygame.font.Font("orangekid.ttf", 25)
text = font.render("A long time ago", True, (0, 128, 0))


        pygame.display.update()
        for i in range(len("A long time ago")):
            display_game.fill(BLACK)
            display_game.blit(text[i],(400+i, 300))

            clock.tick(60)

但它给出了关于文本[i]的错误。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

在这里,您将整个文本呈现为Surface

text = font.render("A long time ago", True, (0, 128, 0))

在这里,你迭代一个字符串:

for i in range(len("A long time ago")):
    display_game.fill(BLACK)
    display_game.blit(text[i],(400+i, 300))

text是一个Surface,而不是一个字符串,所以你不能像字符串一样索引它,并希望获得文本的一部分。名为Surface的{​​{1}}不知道它是否包含文字。

此外,您必须使用某种计时器来每秒更改文本。

以下是一个如何做你想做的事的简单例子:

text

enter image description here

答案 1 :(得分:1)

在您提供的示例中,' text'是一个曲面(font.render根据你给它的字符串渲染一个曲面)。你想要做的是迭代一个字符串,然后将它渲染到一个表面。

我要改变的另一件事是"(400 + i,300)",因为字母宽度超过一个像素,因此仅将坐标移动一个像素会使它们重叠。我建议使用font.size函数来确定新的坐标。

示例:

clock = pygame.time.Clock()
font = pygame.font.SysFont(None, 48)
string = "A long time ago"
windowSurface.fill(BLACK)
for i in range(len(string)):
    text = font.render(string[i], True, (0, 128, 0))
    windowSurface.blit(text,(400 + (font.size(string[:i])[0]), 300))
    pygame.display.update()
    clock.tick(2)