首页 > 解决方案 > 如何使用 pygame alpha 淡入文本/屏幕

问题描述

我可以让我的文本在“场景”结束时淡出,但我不知道如何让文本或屏幕淡入。我看过许多不同的视频和线程,但它们要么处理图像,这与我想要做的不同,说如何淡出(我已经知道如何淡出,我不知道淡入),或者它们已过时。我也尝试过反转 alpha 值和计数器,但从我测试的结果来看,它并没有改变它,而且大多给我错误。

我也很想看看是否有人有更简单的方法来做到这一点,例如。有什么我可以从 pygame 调用的东西可以为我褪色......例如: pygame.fadeout(screen, 2)

import pygame
from pygame.locals import *
pygame.init()

import pygame as pg


def title():
    clock = pg.time.Clock()
    screen = pygame.display.set_mode((1395, 855), pygame.FULLSCREEN)
    font = pygame.font.Font("/Users/ACCOUNTNAME/Library/Fonts/ARIALN.TTF", 70)
    
    color = pg.Color('#FFFFFF')
    orig_surf = font.render("Filler: ", True, color)
    color2 = pg.Color('#FFFFFF')
    orig2_surf = font.render("Very Cool", True, color2)
    
    txt_surf = orig_surf.copy()
    txt2_surf = orig2_surf.copy()
    alpha_surf = pg.Surface(txt_surf.get_size(), pg.SRCALPHA)
    alpha2_surf = pg.Surface(txt2_surf.get_size(), pg.SRCALPHA)
    
    alpha = 255
    counter = 0

    while True:
        for e in pygame.event.get():
            if e.type == QUIT or e.type == KEYDOWN and e.key == pygame.K_ESCAPE:
                pygame.mixer.music.fadeout(1000)
                return

        if alpha > 0 and counter <= 80:
            alpha = max(alpha-0, 0)
            txt_surf = orig_surf.copy()
            alpha_surf.fill((255, 255, 255, alpha))
            txt_surf.blit(alpha_surf, (0, 0), special_flags=pg.BLEND_RGBA_MULT)
            
            txt2_surf = orig2_surf.copy()
            alpha2_surf.fill((255, 255, 255, alpha))
            txt2_surf.blit(alpha2_surf, (0, 0), special_flags=pg.BLEND_RGBA_MULT)
            
            counter += 1
            
        elif alpha > 0 and counter > 80:
            alpha = max(alpha-1.2, 0)
            txt_surf = orig_surf.copy()
            alpha_surf.fill((255, 255, 255, alpha))
            txt_surf.blit(alpha_surf, (0, 0), special_flags=pg.BLEND_RGBA_MULT)

            txt2_surf = orig2_surf.copy()
            alpha2_surf.fill((255, 255, 255, alpha))
            txt2_surf.blit(alpha2_surf, (0, 0), special_flags=pg.BLEND_RGBA_MULT)



        #screen.fill((9, 47, 68, alpha))
        screen.fill((0, 66, 99, alpha))
        
        screen.blit(txt_surf, (302, 348))
        screen.blit(txt2_surf, (509, 418))

        pg.display.flip()
        clock.tick(60)


if __name__ == '__main__':
    pg.init()
    title()
    pg.quit()

标签: pythonpygamefadeinfade

解决方案


您需要做的就是设置全文Surface的alpha 值set_alpha

alpha = 0
counter = 0

while True:
    # [...]

    if counter <= 80:
        alpha = min(alpha + 255/80, 255)            
    elif alpha > 0 and counter > 80:
        alpha = max(alpha - 255/80, 0)
    counter += 1
        
    txt_surf = orig_surf.copy()
    txt_surf.set_alpha(alpha)    
    txt2_surf = orig2_surf.copy()
    txt2_surf.set_alpha(alpha)

如果要淡出整个显示,请创建一个具有窗口大小和您选择的颜色的Surface :

fadeScreen = pygame.Surface(screen.get_size())
fadeScreen.fill((0, 0, 0))

在显示更新之前混合屏幕顶部的Surface :

while True:
    # [...]

    fadeScreen.set_alpha(255-alpha)
    screen.blit(fadeScreen, (0, 0))
    pg.display.flip()

推荐阅读