PyGameウィンドウに表示されるメッセージのリストを表示するアプリケーションを作成しています。物事をより美しくするために、テキストに素敵なフェードイン/フェードアウト効果を追加することにしました。
問題は次のとおりです。SDLでは、ピクセルごとまたはサーフェスごとのアルファのみが許可され、両方は許可されません。そこで、必要な「レイヤー」の不透明度に基づいてピクセルアルファを再計算する関数を作成しましたが、もちろん非常に非常に低速です(コア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
を呼び出してアルファを更新するのはさらに遅いようです。BufferProxy.write()
たぶん、ハードウェアアクセラレーションを使用した何かが役立つでしょうか?ここでの理想は、表面を背景にブリットしながらアルファを適用することだと思いますが、私はこの種のことについてはあまり専門的ではありません。
注:背景が常に黒であるとは限らないため、テキストの色を変更することはできません。