我正在编写一个应用程序,显示 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
对象的实例化,但是以这种方式更新 alpha 似乎更慢,调用BufferProxy.write()
方法..
也许使用硬件加速的东西会有所帮助?我认为这里的理想是在将表面粘贴到背景上的同时应用 alpha,但我在这类事情上不是很专家..
注意:更改文本颜色不是机会,因为背景可能并不总是黑色..