我正在编写一个应用程序,在PyGame窗口上显示消息列表;为了使界面更美观,我决定为文本添加一个漂亮的淡入/淡出效果。
问题是:SDL只允许像素或表面透明度,而不是两者兼备。所以我编写了一个函数,根据期望的“图层”不透明度重新计算像素透明度,但它当然非常、非常、非常慢(即使在2.7GHz的核心i7上,帧率仍降至约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,但我对这种事情并不是很专业。
注意:更改文本颜色并不是一个机会,因为背景可能不总是黑色。