当鼠标未悬停在游戏中时,我试图使用户界面事物变得透明。但由于某种原因,当我设置图像的 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
是因为我的文件而导致它无法正确传输的原因吗?
The set_alpha
该方法似乎不适用于未转换的 png 文件。呼叫convert http://www.pygame.org/docs/ref/surface.html#pygame.Surface.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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)