PyGame 没有触发鼠标事件时 blit 图像消失?

PyGame blit image disappears when no mouse event is fired?

在鼠标事件期间使用 surface.blit 时,blit 不会保留在屏幕上。

我有两张几乎一模一样的图片。标准图像已经存在于表面上,当鼠标悬停在图像上时,需要将另一个图像放置在现有图像之上,当鼠标离开图像时,需要将其移除。

除了需要继续鼠标事件外,我当前的代码可以正常工作 - 当鼠标在图像内静止不动时,叠加图像将被删除。我该如何解决这个问题?

def Execute(self):
    while self.Running == True:

        NewGameButton = pygame.image.load("./Assets/Interface/newgame.png").convert_alpha()
        NewGameButtonHover = pygame.image.load("./Assets/Interface/newgame_hover.png").convert_alpha()

        self.Display.blit(NewGameButton, (460,260))

        pygame.display.flip()

        for Event in pygame.event.get():
            if NewGameButton.get_rect(topleft=(460,260)).collidepoint(pygame.mouse.get_pos()):
                self.Display.blit(NewGameButtonHover, (460,260))
            pygame.display.update()

    pygame.quit()

注:Execute()函数是classApp中的一个方法。

您的代码目前仅在帧内生成的事件的循环内检查其鼠标位置。这意味着如果没有事件,它不会 运行。尝试将该代码移出 for Event in pygame.event.get() 循环,无论事件状态如何,它都会 运行 一帧一次。

请注意,您可能确实想要处理事件,但您现在没有这样做。如果你真的不关心任何事件(甚至不关心 QUIT 事件?),你可以用调用 pygame.events.pump() 代替循环事件,这将让 Pygame 处理任何内部事件(例如拖动或调整 window 的大小),而不向您发送任何内容。