2009-12-12 124 views
0

如果我繪製任何形狀在表面上(與SRCALPHA標誌上)以部分透明的顏色它完全取代什麼它的下面,而不是像重疊,你會期望在圖像編輯器。重疊部分透明的形狀

我該如何讓形狀重合?

回答

1

如前所述,在pygame的抽獎功能實際上並沒有摻和你所期望的方式。從PyGame文檔:

大多數參數接受一個RGB三元組的顏色參數。這些也可以接受RGBA四聯體。如果alpha值包含像素alpha,則alpha值將直接寫入Surface,但繪製函數不會透明地繪製。

你可能想要做的事實質上就是Alex Martelli所說的 - 用alpha通道創建一箇中間軟件表面,在你的表面繪製你的形狀,然後blit混合到最終表面。如果您使用過PyGame的字體渲染,請注意,它的工作原理大致相同,只不過Font.render爲您創建了臨時表面。

我有點生鏽Python和pygame的這些天,但這裏有一個簡單的例子是希望沒有太多的錯誤:

# returns a surface with the circle drawn onto it 
def render_transparent_circle(color, radius, width=0): 
    size = radius * 2 
    temp_surf = pygame.Surface((size, size), SRCALPHA) 
    temp_surf.fill(Color(0, 0, 0, 0)) 
    pygame.draw.circle(temp_surf, color, (radius, radius), radius, width) 
    return temp_surf 

# draw a half-opaque blue circle of radius 30 to the display at point (50, 100) 
def test(): 
    transp_blue = Color(0, 0, 255, 128) 
    screen = pygame.display.get_surface() 
    circle = render_transparent_circle(transp_blue, 30) 
    screen.blit(circle, (50, 100)) 

附: - 如果要多次顯示相同的形狀,可能需要考慮緩存中間曲面(但不要忘記配置文件以查明是否有幫助)。

1

您可以使用blit以及適當的BLEND_*值(將形狀保持爲單獨的表面,以進行完整性和編輯,並且只爲了顯示目的將它們佈告)。

0

阿爾法自身只是一個額外的「價值」,可以服務於一個目的。恰恰相反,目的通常是(但並非總是)透明(其他用途包括反射,鏡面高光,甚至是僞裝HDR的方法)。

您需要指定您希望它融合(和公式應該使用這樣做)。一個簡單的谷歌搜索"pygame blend mode"顯示了一些很好的資源。

正如亞歷指出的那樣,位塊傳送需要一個混合模式作爲參數。這個StackOverflow問題提供了更多信息。

+0

問題是,draw。*函數不採用混合模式參數。 – 2009-12-13 16:30:55