使用 Pygame 生成颜色淡入效果

Generation of color fade-in effect using Pygame

在 pygame 中使用不透明度时,我注意到当您忽略用颜色填充由 pygame.display.set_mode() 创建的主表面时。你可以通过在它上面 blit 另一个 Surface 来创建一个非常整洁的颜色淡入效果。奇怪的是,这种影响似乎是由 alpha 的值和 pygame.time.Clock()

的滴答率控制的

如果alpha的值>= tick rate,效果是即时的,当alpha的值< tick rate时,效果的速度似乎变长了tick rate - alpha 增加。我目前不知道为什么会这样,所以我希望对图书馆更有经验的人可以深入了解造成这种影响的原因。

import pygame 

def main():
    button_rect = pygame.Rect(0, 0, 200, 40)

    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT: 
                exit()

        # When the window is not filled with a color you get a cool
        # fade-in effect. 
        # window.fill((0, 0, 0))

        container = pygame.Surface((848, 480), pygame.SRCALPHA)
        container.fill((30, 30, 30))
        
        # Place button in center of screen.
        button_rect.center = window.get_rect().center

        mouse_pos =  pygame.mouse.get_pos()

        # The value of alpha affects the speed of the effect
        alpha = 10
        if button_rect.collidepoint(mouse_pos):
            button = pygame.draw.rect(container, 
                                      (255, 0, 0, alpha), 
                                      button_rect)
        else:
            button = pygame.draw.rect(container, 
                                      (255, 255, 255, alpha), 
                                      button_rect)

        window.blit(container, (0, 0))
        window.blit(text, text.get_rect(center=button.center))

        pygame.display.update(container.get_rect())

        # Clock speed affects fade-in time as well.
        clock.tick(60)

        
if __name__ == "__main__":
    initalized, unintialized = pygame.init()
    window = pygame.display.set_mode((848, 480), pygame.RESIZABLE)    
    clock = pygame.time.Clock()

    font = pygame.font.Font("../assets/fonts/terminal.ttf", 20)
    text = font.render("Hello", 0, (0,0,0))
    main()

您在每个帧的 window 表面上绘制一个透明表面。这会产生淡入淡出的效果。 window 中的绘图越频繁地在其上放置透明表面,就会变得越坚固。提高滴答率并更频繁地这样做会使淡入速度更快。增加 alpha 值会使覆盖 window 的 Surface 不那么透明,并且 fad-in 也会变得更快。
另见