web-dev-qa-db-ja.com

Pygameで透明な長方形を描く

アルファ付きの色を持つ長方形を描画するにはどうすればよいですか?私が持っています:

windowSurface = pygame.display.set_mode((1000, 750), pygame.DOUBLEBUF)
pygame.draw.rect(windowSurface, pygame.Color(255, 255, 255, 128), pygame.Rect(0, 0, 1000, 750))

しかし、白い長方形を50%透明にしたいのですが、アルファ値が機能していないようです。

28
John Stimac

pygame.draw関数はアルファで描画しません。ドキュメントには次のように書かれています:

引数のほとんどは、RGB 3成分の色引数を受け入れます。これらは、RGBA 4連符も受け入れることができます。アルファ値は、ピクセルアルファが含まれている場合、サーフェスに直接書き込まれますが、描画関数は透過的に描画しません。

できることは、2番目のサーフェスを作成し、それを画面にブリットすることです。ブリッティングはアルファブレンディングとカラーキーを行います。また、アルファを表面レベル(より速く、より少ないメモリ)またはピクセルレベル(より遅いがより正確)で指定できます。次のいずれかを実行できます。

s = pygame.Surface((1000,750))  # the size of your rect
s.set_alpha(128)                # alpha level
s.fill((255,255,255))           # this fills the entire surface
windowSurface.blit(s, (0,0))    # (0,0) are the top-left coordinates

または、

s = pygame.Surface((1000,750), pygame.SRCALPHA)   # per-pixel alpha
s.fill((255,255,255,128))                         # notice the alpha value in the color
windowSurface.blit(s, (0,0))

最初のケースでは、sに描画する他のものはすべて、指定したアルファ値でブリットされることに注意してください。したがって、たとえばこれを使用してオーバーレイコントロールを描画する場合は、2番目の方法を使用した方がよい場合があります。

また、pygame.HWSURFACEを使用して、表面ハードウェアアクセラレーションを作成することも検討してください。

Pygameサイト、特にイントロで Surface docs を確認してください。

47

私があなたを助けるためにできることは、塗りつぶされていない長方形を描く方法を示すことです。長方形の線は次のとおりです。

pygame.draw.rect(surface, [255, 0, 0], [50, 50, 90, 180], 1)

「1」は記入されていないことを意味します

2
l. zhang

これを行う方法は、pygameで長方形を描く代わりに、Paint.netやFire Alpacaなどの描画プログラムを使用して、透明な長方形の画像を作成することです。

0
Sheepy