我正在编写一个应用程序,显示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
Run Code Online (Sandbox Code Playgroud)
这里有完整的例子:https://gist.github.com/rshk/5072173(不是真正的应用程序,只是一个相关的例子)
有什么方法可以加快速度吗?我看到可以直接访问底层缓冲区,避免实例化Color对象,但是以这种方式更新alphas似乎更慢,调用BufferProxy.write()方法.
也许使用硬件加速的东西有帮助吗?我认为这里的理想是在将表面涂抹到背景上时应用alpha,但我对这种事情并不是很专业.
注意:更改文本颜色不是机会,因为背景可能不总是黑色..
因为这可能会成为某人作为日后参考,我照建议的@Xymostech:创建一个呈现的文本的大小相同的另一面,并应用该表面上的α,使用.set_alpha().
更新版本:https://gist.github.com/rshk/5072375
| 归档时间: |
|
| 查看次数: |
4633 次 |
| 最近记录: |