天天看點

《Python和Pygame遊戲開發指南》——2.11 顔色的透明度

本節書摘來自異步社群《python和pygame遊戲開發指南》一書中的第2章,第2.11節,作者[美]al sweigart(斯維加特), 李強 譯,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

當你通過一個帶有紅色色調的玻璃視窗看過去,其背後的所有顔色都會增加一個紅色的陰影。你可以通過給顔色值添加第4個0~255的整數值來模仿這種效果。這個值叫作alpha值(alpha value)。這是表示一種顔色有多麼不透明的一個路徑成本。通常,當你在一個surface對象上繪制一個像素的時候,新的顔色完全替代了那裡已經存在的任何顔色。但是,使用帶有一個alpha值的顔色,可以隻是給已經存在的顔色之上添加一個帶有顔色的色調。

例如,表示綠色的3個整數值的一個元組是(0, 255, 0)。但是,如果添加了第4個整數作為alpha值,我們可以使其成為一個半透明的綠色(0, 255, 0, 128)。255的alpha值是完全不透明的(也就是說,根本沒有透明度)。顔色(0, 255, 0)和(0, 255, 0, 255)看上去完全相同。alpha值為0,表示該顔色是完全透明的。如果将alpha值為0的任何一個顔色繪制到一個surface對象上,它沒有任何效果,因為這個顔色完全是透明的,且不可見。

為了使用透明顔色來進行繪制,必須使用convert_alpha()方法建立一個surface對象。例如,如下代碼建立了一個可以在其上繪制透明顔色的surface對象。

《Python和Pygame遊戲開發指南》——2.11 顔色的透明度

一旦在該surface對象上繪制的内容存儲到了anothersurface中,随後another surface可以“複制”(blit,也就是copy)到displaysurf中,以便它可以顯示在螢幕上(參見本章稍後的2.19節)。在那些并非從一個convert_alpha()傳回的surface對象上,你不能夠使用透明顔色,這也包括從pygame.display. set_mode()傳回的顯示surface,注意這一點是很重要的。

如果我們建立了一個顔色元組來繪制著名的隐形粉紅獨角獸,應該會使用(255, 192, 192, 0),它最終看上去是完全不可見的,就像是alpha值為0的任何其他顔色一樣。畢竟,它是隐形的。圖2-5是繪制隐形粉紅獨角獸的螢幕截圖。

《Python和Pygame遊戲開發指南》——2.11 顔色的透明度