我正在編寫一個應用程序,顯示PyGame窗口中出現的消息列表;爲了讓事情變得更漂亮,我決定爲文本添加一個很好的淡入/淡出效果。Pygame - 表面淡入/淡出
問題是:SDL只允許每個像素或每個表面的alpha,而不是兩個。所以我寫了一個函數,根據想要的「圖層」不透明度重新計算像素alpha,但它當然非常非常慢(甚至在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
對象的實例,但它似乎更慢更新阿爾法這種方式,調用BufferProxy.write()
方法..
也許使用硬件加速的東西將幫助?我認爲這裏的理想是應用alpha而blitting表面到背景上,但我並不是很擅長這類東西。
說明:更改文字顏色不是一個機會,因爲背景可能並不總是黑色......
爲什麼你不製造另一個表面?然後你可以訪問每個表面的阿爾法... – Xymostech 2013-03-02 18:00:55
我試過了,但它似乎沒有效果。 – redShadow 2013-03-02 18:17:54
..你說得對,我再次嘗試,在這個例子中,它的工作原理!我懷疑在「真實世界」應用程序中有一些標誌有問題。感謝您的建議! – redShadow 2013-03-02 18:22:54