在这里,你渲染整个文本到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
是表面,而不是一个字符串了,这样你就可以不要将它索引为一个字符串,并希望获得文本的一部分。名为text
的Surface
不知道它是否包含文本。
此外,您必须使用某种计时器来每秒更改文本。
这里是你如何可以做一个简单的例子,你想要什么:
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
clock = pygame.time.Clock()
font = pygame.font.Font(None, 25)
# raise the USEREVENT every 1000ms
pygame.time.set_timer(pygame.USEREVENT, 200)
# generate a generator that scrolls through the letters
# given a string foo, it will return
# f
# fo
# foo
def text_generator(text):
tmp = ''
for letter in text:
tmp += letter
# don't pause for spaces
if letter != ' ':
yield tmp
# a simple class that uses the generator
# and can tell if it is done
class DynamicText(object):
def __init__(self, font, text, pos, autoreset=False):
self.done = False
self.font = font
self.text = text
self._gen = text_generator(self.text)
self.pos = pos
self.autoreset = autoreset
self.update()
def reset(self):
self._gen = text_generator(self.text)
self.done = False
self.update()
def update(self):
if not self.done:
try: self.rendered = self.font.render(next(self._gen), True, (0, 128, 0))
except StopIteration:
self.done = True
if self.autoreset: self.reset()
def draw(self, screen):
screen.blit(self.rendered, self.pos)
message = DynamicText(font, "A long time ago...", (200, 200), autoreset=True)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT: break
if event.type == pygame.USEREVENT: message.update()
else:
screen.fill(pygame.color.Color('black'))
message.draw(screen)
pygame.display.flip()
clock.tick(60)
continue
break
pygame.quit()
谢谢! :) – Vito