带有Alpha的Pygame表面不会模糊透明度

时间:2018-11-04 03:26:33

标签: python pygame pygame-surface

当鼠标没有悬停在游戏上时,我试图使用户界面在游戏中透明。但是由于某种原因,当我设置图像的Alpha值使其透明时,什么也没发生。这是一些可运行的代码,可以解决该问题:

import pygame
WHITE = (255, 255, 255)

class UI:
    def __init__(self):
        self.img = pygame.image.load("ink_bar_solid.png")
        self.img.set_alpha(0)
        self.ink_bar_rect = self.img.get_bounding_rect()
        self.x, self.y = 0, 10

resolution = (500, 500)
screen = pygame.display.set_mode(resolution)
mouse = pygame.mouse.get_pos
ink_bar = UI()
run = True

def mouse_over():
    if ink_bar.ink_bar_rect.collidepoint(mouse()):
        ink_bar.img.set_alpha(255)
    else:
        ink_bar.img.set_alpha(0)

while run:
    mouse_over()
    screen.fill(WHITE)
    screen.blit(ink_bar.img, (ink_bar.x, ink_bar.y))
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
            break
    pygame.display.flip()
pygame.quit()

任何帮助将不胜感激! 编辑:我收到某人的评论,他们说他们使用了自己的图像,效果很好...执行程序时收到此警告:

libpng warning: iCCP: known incorrect sRGB profile

是因为我的文件导致文件无法正确出血的原因吗?

1 个答案:

答案 0 :(得分:2)

set_alpha方法似乎不适用于未转换的png文件。调用convert方法还将大大提高blit性能:

self.img = pygame.image.load("ink_bar_solid.png").convert()

它也不适用于按像素的Alpha曲面(使用convert_alpha转换或使用pygame.SRCALPHA标志创建的曲面)。可以通过以下方式更改每个像素表面的Alpha:用透明的白色填充它们并传递pygame.BLEND_RGBA_MULT特殊标志,例如:

image = pygame.image.load('an_image.png').convert_alpha()
# Make a copy so that the original doesn't get modified.
transparent_image = image.copy()
transparent_image.fill((255, 255, 255, 100), special_flags=pygame.BLEND_RGBA_MULT)