我会创建一种"滚动对话"就像在旧点和点击。 我会尝试更好地解释一下:
我有以下文字:" 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]的错误。
我该如何解决这个问题?
答案 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
答案 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)