3

ツリー内のオブジェクトを使用してインターフェイスを管理し、それらを正しい順序で相互にブリットするカスタムGUIモジュールがあります。

現在、私のオブジェクトの中には、ピクセルごとの透明度を備えた単なるサーフェスであるものと、カラーキーを使用するものがあります。

私の問題は、ピクセルごとの透明度のあるサーフェスをカラーキーで塗りつぶされた別のサーフェスにブリットすると、最初のサーフェスが2番目のピクセルの一部の色を変更することです。つまり、それらは透明ではなくなります。ピクセルごとの透明度を取り除くことなく、どうすればそれらを混ぜることができますか?

4

1 に答える 1

4

カラーキーを使用するものを変換して、ピクセルごとの透明度を使用してから、を使用してSurfaces別のピクセルごとの透明度をブリットすることができます。Surfaceconvert_alpha


例:

COLORKEY=(127, 127, 0)
TRANSPARENCY=(0, 0, 0, 0)
import pygame
pygame.init()
screen = pygame.display.set_mode((200, 200))
for x in xrange(0, 200, 20):
  pygame.draw.line(screen, (255, 255, 255), (x, 0),(x, 480))

# create red circle using a colorkey
red_circle = pygame.Surface((200, 200))
red_circle.fill(COLORKEY)
red_circle.set_colorkey(COLORKEY)
pygame.draw.circle(red_circle, (255, 0, 0), (100, 100), 25)

#create a green circle using alpha channel (per-pixel transparency)
green_circle = pygame.Surface((100, 100)).convert_alpha()
green_circle.fill(TRANSPARENCY)
pygame.draw.circle(green_circle, (0, 255, 0, 127), (50, 50), 25)

# convert colorkey surface to alpha channel surface before blitting
red_circle = red_circle.convert_alpha()
red_circle.blit(green_circle, (75, 75))

screen.blit(red_circle, (0, 0))

pygame.display.flip()

結果:

ここに画像の説明を入力してください

于 2012-07-25T11:58:17.793 に答える