Python pygame滚动对话文本

Python pygame滚动对话文本,python,pygame,Python,Pygame,我会创建一种“滚动对话”,就像旧的点击式对话一样。 我将尝试更好地解释: 我有以下文字:“你好,世界”。 我会在屏幕上一个字母一个字母地打印:“H”(在“e”之后1秒)(在“l”之后1秒)等等 我试着这样做: font = pygame.font.Font("orangekid.ttf", 25) text = font.render("A long time ago", True, (0, 128, 0)) pygame.display.update() f

我会创建一种“滚动对话”,就像旧的点击式对话一样。 我将尝试更好地解释:

我有以下文字:“你好,世界”。 我会在屏幕上一个字母一个字母地打印:“H”(在“e”之后1秒)(在“l”之后1秒)等等

我试着这样做:

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]的错误


如何解决此问题?

在这里,您可以将整个文本渲染到
曲面上:

text=font.render(“很久以前”,True,(0,128,0))
在这里,您迭代一个字符串:

范围内的i(len(“很久以前”):
显示游戏填充(黑色)
显示游戏.blit(文本[i],(400+i,300))
text
是一个曲面,不再是字符串,因此不能像字符串一样对其进行索引,而希望获得文本的一部分。名为
text
曲面
不知道它是否包含文本

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

下面是一个简单的示例,说明了如何做自己想做的事情:

导入pygame
pygame.init()
screen=pygame.display.set_模式((640480))
clock=pygame.time.clock()
font=pygame.font.font(无,25)
#每1000毫秒引发一次USEREVENT
pygame.time.set_计时器(pygame.USEREVENT,200)
#生成一个滚动字母的生成器
#给定一个字符串foo,它将返回
#f
#fo
#福
def文本_生成器(文本):
tmp=''
对于文本中的字母:
tmp+=字母
#不要停下来等待空格
如果字母!='':
产量tmp
#使用生成器的简单类
#并且可以判断它是否完成了
类DynamicText(对象):
定义初始化(self、字体、文本、pos、autoreset=False):
self.done=False
self.font=font
self.text=文本
self.\u gen=text\u生成器(self.text)
self.pos=pos
self.autoreset=自动重置
self.update()
def重置(自):
self.\u gen=text\u生成器(self.text)
self.done=False
self.update()
def更新(自我):
如果不是自行完成:
try:self.rendered=self.font.render(下一个(self.\u gen),True,(0,128,0))
除停止迭代外:
self.done=True
如果self.autoreset:self.reset()
def提取(自身,屏幕):
屏幕blit(自渲染、自定位)
message=DynamicText(字体,“很久以前…”,(200200),autoreset=True)
尽管如此:
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:break
如果event.type==pygame.USEREVENT:message.update()
其他:
screen.fill(pygame.color.color('black'))
消息绘制(屏幕)
pygame.display.flip()
时钟滴答(60)
持续
打破
pygame.quit()

在您给出的示例中,“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)