我正在编写一个应用程序,显示PyGame窗口中出现的消息列表;为了让事情变得更漂亮,我决定为文本添加一个很好的淡入/淡出效果。
问题是:SDL仅允许每像素或每表面alpha,而不是两者。所以我编写了一个函数,根据想要的“图层”不透明度重新计算像素alpha,但它当然非常非常非常慢(即使在核心i7 @ 2.7GHz上,它也会下降到~10FPS):
def apply_alpha(surface, alpha):
for x in xrange(surface.get_width()):
for y in xrange(surface.get_height()):
color = surface.get_at((x, y))
color.a = int(color.a * alpha)
surface.set_at((x, y), color)
return surface
这里有完整的例子:https://gist.github.com/rshk/5072173(不是真正的应用程序,只是一个相关的例子)
有没有办法加快速度?我看到可以直接访问底层缓冲区,避免Color
对象的实例化,但是以这种方式更新alphas似乎更慢,调用BufferProxy.write()
方法..
也许使用硬件加速的东西会有帮助吗?我认为这里的理想是在将表面涂抹到背景上时应用alpha,但我对这种事情并不是很专业..
注意:更改文字颜色不是偶然的,因为背景可能并不总是黑色..
答案 0 :(得分:6)
由于这可能作为某人的未来参考,我按照@Xymostech的建议做了:创建另一个具有相同大小的渲染文本的表面,并使用.set_alpha()
在该表面上应用alpha。