Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python pygame集颜色透明度_Python_Pygame_Transparency_Blending - Fatal编程技术网

python pygame集颜色透明度

python pygame集颜色透明度,python,pygame,transparency,blending,Python,Pygame,Transparency,Blending,我想在屏幕上创建一个tranparent按钮和文本,我搜索执行此操作的方法,第四个RGB参数和set_alpha可以使颜色透明 因此,我使用self.button\u color=(0100100128)设置按钮,使用self.text.set\u alpha(128)更改文本的颜色 但是当我运行脚本时没有任何变化 代码如下: #!/usr/bin/python import sys,os import pygame class Setting(): def __init__(sel

我想在屏幕上创建一个tranparent按钮和文本,我搜索执行此操作的方法,第四个RGB参数和
set_alpha
可以使颜色透明

因此,我使用
self.button\u color=(0100100128)
设置按钮,使用
self.text.set\u 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()
阅读以下文件:

[…]根据使用的背景类型和抗锯齿,这将返回不同类型的曲面。出于性能原因,最好知道将使用哪种类型的图像。[…]如果背景是透明的,将设置颜色键。抗锯齿图像渲染为24位RGB图像。如果背景是透明的,则将包括像素alpha

这意味着,如果
反别名
参数为
True
,则必须设置透明的
背景
颜色以生成透明文本。e、 g:

self.button_color=(0100100128)#透明alpha=128
self.text_color=(255,0,0)
self.text=pygame.font.font(无,100).渲染(text,True,self.text\u颜色,self.button\u颜色)

阅读以下文件:

[…]颜色参数可以是RGB序列、RGBA序列或映射的颜色索引。如果使用RGBA,将忽略Alpha(RGBA的一部分),除非曲面使用每像素Alpha(曲面具有SRCALPHA标志)

您必须使用属性
SCRALPHA
创建pygame.Surface对象才能绘制透明矩形:

rectsurf=pygame.Surface(self.rect.size,pygame.SRCALPHA)
矩形填充(自身按钮颜色)
setting.screen.blit(rectsurf、self.rect.topleft)

要实现所需,必须使用特殊标志
BLEND\u MAX
在矩形上显示文本
draw_按钮
只需
blit
,屏幕上包含文本的按钮矩形。e、 g:

class按钮():
定义初始化(自身、设置、文本):
自宽、自高=400100
自身按钮颜色=(0100128)
self.text_color=(255,0,0128)
self.text=pygame.font.font(无,100).渲染(text,True,self.text\u颜色,self.button\u颜色)
self.rect=pygame.rect(0,0,self.width,self.height)
self.text\u rect=self.text.get\u rect()
self.text_rect.center=self.rect.center
self.btnsurf=pygame.Surface(self.rect.size,pygame.SRCALPHA)
self.btnsurf.fill(self.button\u颜色)
self.btnsurf.blit(self.text、self.text、special\u flags=pygame.BLEND\u MAX)
self.rect.center=setting.screen\u rect.center
def draw_按钮(自身,设置):
setting.screen.blit(self.btnsurf、self.rect)

我找到了我设置的
self.text.set\u alpha(128)
self.text.set\u alpha(255)
,它是相同颜色的文本,是由
self.button\u color=(0100100100128)
的alpha控制的文本颜色?@M\u Sea对不起,我的错了
self.text.set_alpha(128)
是多余的,因为曲面具有每像素的alpha。我认为这种情况没有意义。如果我想为按钮和文本设置不同的透明,我怎么能做到呢?@M_Sea这似乎不可能,很容易。目前我不知道。无论如何,这是你问题的延伸。非常感谢,我发现如果我将
False
设置为
True
作为
。渲染(text,False,self.text\u color
,那么它可以直接使用
self.text.set_alpha(200)
设置透明,唯一不好的是文本不漂亮