gpt4 book ai didi

python - Pygame - 表面淡入/淡出

转载 作者:太空狗 更新时间:2023-10-30 02:33:03 26 4
gpt4 key购买 nike

我正在编写一个应用程序来显示出现在 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() 方法..

也许使用硬件加速的东西会有所帮助?我认为这里的理想情况是在将表面 blitting 到背景上的同时应用 alpha,但我不是这种事情的专家..

注意:更改文本颜色是不可能的,因为背景可能并不总是黑色..

最佳答案

因为这可能会成为某些人 future 的引用,我按照@Xymostech 的建议做了:创建另一个与渲染文本大小相同的表面,并在该表面上应用 alpha,使用 .set_alpha() .

此处更新版本:https://gist.github.com/rshk/5072375

关于python - Pygame - 表面淡入/淡出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15177568/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com