- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试为被 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/
使用 pygame,是否会更有效率: 每帧从 spritesheet 的一部分中 Blit 一个单独的 sprite 在启动时,将每个 Sprite 从 spritesheet 传输到它们自己的表面,
阅读 pygame 教程 here ,你会发现这个例子:(箭头是我的) for o in objects: screen.blit(background, o.pos, o.pos) # Re
我正在为 WinCE 6.0 设备开发一个应用程序,其中需要旋转屏幕,因此我们使用典型的 ChangeDisplaySettingsEx() API。我也在 View 上画一些东西。 从 memDC
我想将用户输入到屏幕上的文本传输到屏幕上。每次用户按回车键时,键入的文本都会被传输到屏幕上。对于文本输入,我使用这个 [text_input 模块] ( https://github.com/Near
我得到了一个不断变化/更新的缓冲区,我需要将这个缓冲区的像素 blit 到屏幕上。对于我的测试代码,我读取了一个位图并将其存储到缓冲区中。问题是,我想在使用 OpenGL 将特定颜色 blit 到屏幕
给定一张图片,如何将其“包裹”在屏幕上? 例如,如果您将图像的 rect 样式对象设置在屏幕边缘下方 - 不可见的一半会 blit 到屏幕顶部。 imageRect.top=800 #Below
我正在尝试为被 blit 的文本创建打字机效果。所谓打字机效应,我的意思是我试图避免整个文本同时出现在屏幕上。相反,我试图让每个字母单独出现,在字符串中的下一个字符出现之前稍有延迟。 要注意的是我没有
我正在寻求实现一个管理 blit 队列的模块。有一个表面,该表面的部分(由矩形包围)被复制到表面内的其他地方: add_blt(rect src, point dst); 可以有任意数量的操作按顺序发
我正在尝试让我的网络摄像头通过 pygame 显示视频。这是代码: # import the relevant libraries import time import pygame import p
我正在尝试在我的 python 应用程序中实时绘制多个子图。理想情况下,我还应该能够在每个子图中绘制多条线,但为了简单起见,我假设每个子图中绘制一条线。为了有效地做到这一点(我正在寻找快速绘图),我试
我正在尝试将多采样场景渲染为纹理,这是我正在使用的代码。我得到一个黑屏。我在 init 结束时检查了 fbo 的完整性,他们报告两个 fbo 都是完整的。 void init_rendered_FBO
我有 2 个 FBO + MRT,它们有相同的附件(每个附件有 4 个颜色)。使用 glBlitFrameBuffer 对深度缓冲区和 one color_attachment 按预期工作。但是,当我
我知道这个话题经常出现,但经过多次尝试、搜索和放弃,我又把它带回到你身边。 我有一个类,其中包含一个 matplotlib 图形。在此图中,我想要一个文本,当用户按下某个键时,文本会更新为某些内容,而
我正在尝试在 python 中为 pygame 制作一个脚本,以绘制一个文本居中的按钮,但是当我 blit 到屏幕上时,它 blits 到我给它的 x 和 y,而不是按比例居中的位置。我希望能够将它集
我正在尝试使用 SDL 制作一个非常小且简单的片段。这个就像一个魅力: SDL_Window * window = SDL_CreateWindow("SDLTest", 0, 0, SCREEN_W
我正在尝试让我的网络摄像头通过 pygame 显示视频。这是代码: # import the relevant libraries import time import pygame import p
我正在编写一个基本上使用 Sprite 的游戏,我在这段代码中使用了 Sprite 表,最终得到了 "invalid destination for blit" 错误。 class spriteshe
如果任何对 pygames 有基本了解的人可以帮助我解决我目前面临的问题,那就太好了。对于你们这些绝对的神来说,应该不会太难。 我现在的代码遇到了问题。 我正在尝试制作一个简单的游戏,其中程序显示一个
我目前正在尝试再次对已绘制图像的一部分进行 blit。为此,我读到一个可以在使用 blit 时使用可选的第三个区域参数。我不知道为什么,但这个参数对我来说很奇怪。 据我了解,区域参数是(pos_x、p
我想将一个数组复制到另一个大小不同的数组。我想要这样的功能: blit(destimg,src,dstlocation) 例如 blit(zeros((7,7)),ones((3,3)),(4,4))
我是一名优秀的程序员,十分优秀!