【发布时间】:2018-11-04 03:26:32
【问题描述】:
当鼠标没有悬停在游戏上时,我正在尝试使游戏中的用户界面事物透明。但是由于某种原因,当我将图像的 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
是不是因为我的文件而无法正常 blit 的原因?
【问题讨论】:
-
我很确定问题只是因为您错误地对
ink_bar进行了 blitting。只需删除每个变量名称前面的self.(self.是您在对象中用来引用自身的名称),就像在 blit 调用中的(ink_bar.x, ink_bar.y)一样。经过这个小修改(并使用我自己加载的 256 x 256 图像),当没有悬停时,对象是不可见的,反之亦然。 -
抱歉,位置参数中的 self 是拼写错误。最初我将其设置为 (0, 0) 但在此处将其更改为图像的位置以进行澄清。不管位置论点发生了什么,这个问题对我来说仍然奇怪地持续存在。
标签: python pygame pygame-surface