簡體   English   中英

python pygame 設置顏色透明度

[英]python pygame set color transparency

我想在屏幕上創建一個透明的按鈕和文本,我搜索了這樣做的方法,第四個RGB參數和set_alpha可以使顏色透明

所以我使用self.button_color=(0,100,100,128)來設置按鈕和self.text.set_alpha(128)來改變文本的顏色

但是當我運行腳本時沒有任何變化

這是代碼:

#!/usr/bin/python
import sys,os
import pygame


class Setting():
    def __init__(self,width,height):
        self.w=width
        self.h=height
        self.flag=pygame.RESIZABLE
        self.screen=pygame.display.set_mode((self.w,self.h),self.flag)
        self.screen_rect=self.screen.get_rect()
        pygame.display.set_caption("Test")

class Button():
    def __init__(self,setting,text):            
        self.width,self.height = 400,100

        self.button_color=(0,100,100,128)

        self.text_color=(255,0,0)
        self.text = pygame.font.Font(None,100).render(text,True,self.text_color)
        self.text.set_alpha(128)
        self.rect = pygame.Rect(0,0,self.width,self.height)
        self.rect.center = setting.screen_rect.center
        self.text_rect = self.text.get_rect()
        self.text_rect.center = self.rect.center
    def draw_button(self,setting):
        setting.screen.fill(self.button_color,self.rect)
        setting.screen.blit(self.text,self.text_rect)


def game():
    pygame.init()
    setting=Setting(1200,800)
    button=Button(setting,'PLAY')
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
        setting.screen.fill((0,0,0))
        button.draw_button(setting)
        pygame.display.flip()
game()

閱讀pygame.font.Font.render的文檔:

[...] 根據所使用的背景和抗鋸齒類型,這將返回不同類型的表面。 出於性能原因,最好知道將使用什么類型的圖像。 [...]如果背景是透明的,將設置一個顏色鍵。 抗鋸齒圖像被渲染為 24 位 RGB 圖像。 如果背景是透明的,則將包含像素 alpha

這意味着,如果antialias參數為True ,那么您必須設置透明background顏色以生成透明文本。 例如:

self.button_color=(0,100,100,128) # transparent alpha=128
self.text_color=(255,0,0)
self.text = pygame.font.Font(None,100).render(text,True,self.text_color, self.button_color)

閱讀pygame.Surface.fill的文檔:

[...] 顏色參數可以是 RGB 序列、RGBA 序列或映射的顏色索引。 如果使用 RGBA,則忽略 Alpha(RGBA 的一部分),除非表面使用每像素 alpha(表面具有 SRCALPHA 標志)

你必須創建具有屬性的pygame.Surface對象SCRALPHA繪制一個矩形透明:

rectsurf = pygame.Surface(self.rect.size,pygame.SRCALPHA)
rectsurf.fill(self.button_color)
setting.screen.blit(rectsurf,self.rect.topleft)

要實現您想要的效果,您必須使用特殊標志BLEND_MAX對矩形上的文本進行blit draw_button只需要blit ,即包含文本的按鈕矩形在屏幕上。 例如:

class Button():
    def __init__(self,setting,text):
        self.width,self.height = 400,100

        self.button_color=(0,100,100,128)
        self.text_color=(255,0,0,128)
        self.text = pygame.font.Font(None,100).render(text,True,self.text_color, self.button_color)

        self.rect = pygame.Rect(0,0,self.width,self.height)
        self.text_rect = self.text.get_rect()
        self.text_rect.center = self.rect.center

        self.btnsurf = pygame.Surface(self.rect.size,pygame.SRCALPHA)
        self.btnsurf.fill(self.button_color)
        self.btnsurf.blit(self.text, self.text_rect, special_flags=pygame.BLEND_MAX)

        self.rect.center = setting.screen_rect.center

    def draw_button(self,setting):
        setting.screen.blit(self.btnsurf,self.rect)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM