gpt4 book ai didi

python - 如何延迟从列表中迭代 blits

转载 作者:太空宇宙 更新时间:2023-11-04 03:34:55 26 4
gpt4 key购买 nike

我正在尝试为被 blit 的文本创建打字机效果。所谓打字机效应,我的意思是我试图避免整个文本同时出现在屏幕上。相反,我试图让每个字母单独出现,在字符串中的下一个字符出现之前稍有延迟。

要注意的是我没有使用 pygame 的 font.render。相反,我制作了自己的自定义字体,每个字母都保存为一个单独的图像文件。现在每个字母数字字符都有自己的变量,它的图像附加到该变量,并且每个字符都附加到列表中。

例如:

    letter_IMGs = []
a = "a" == pygame.image.load("IMG/letter_a.gif)
letter_IMG.append(a)

下面,我有一些类似的东西:

    letter_pos_x = 0
text = "Hello"
for i, c in enumerate(text):
screen.blit(letter_IMGs[i], (letter_pos_x,0))
letter_pos_x += 20
scroll_wait #this is a clock.delay variable. It's value was set outside the loop. I'm just calling it here.

正如您所猜测的那样,该代码的结果是整行文本在延迟后同时出现。我一直在尝试根据需要对其进行编码,但我想出的大部分结果都返回“无法遍历表面对象”错误。

我几乎不知道下一步该怎么做。请注意,在过去的一年里,我自己断断续续地学习了一些代码,而且我还不知道我在做什么。任何和所有帮助将不胜感激。

提前感谢您的宝贵时间。

最佳答案

无需深入了解 pygame 的具体细节,您只需更改迭代器,使其返回子字符串而不是字母:

def iterate_text(text):
for r in range(len(text)):
yield text[:r + 1]

这将迭代地返回子字符串:

for t in iterate_text('hello'):
print t

# h
# he
# hel
# hell
# hello

使用单独的函数绘制字符串:

def draw_text(x, y, text):
characters = [letter_IMGs[t] for t in text]
cursor = x
for char in characters:
screen.blit(char, cursor, y)
cursor += 20

在您的主循环中,您可以决定何时获取下一个字符。你基本上会做类似的事情:

 typewriter = iter_text('hello world')
text_to_draw = None
advance_text = False

在循环之外的一个层次上,从一帧到另一帧都存在。当你想绘制下一个字符时,在主循环中将 advance_text 设置为 True:

 if typewriter and advance_text:
text_to_draw = typewriter.next()
advance_text = False # until you set it again

if text_to_draw :
draw_text(0,0, draw_text)

您可以通过用新文本重置打字机来重新开始,并通过在下一帧之前将 advance_text 设置为 True 来控制新字符出现的时间

关于python - 如何延迟从列表中迭代 blits,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29547925/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com