如何使用pygame alpha淡入文本/屏幕

2024-09-29 01:33:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我可以让我的文字在“场景”结束时淡出,但我不知道如何使文字或屏幕淡入。我看过很多不同的视频和帖子,但它们要么是针对不同于我尝试做的图像,比如说如何淡出(我已经知道如何淡出,我不知道淡入),要么它们已经过时。我也尝试过反转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()

Tags: alphatxtcounterfillscreenpygamesurfpg
1条回答
网友
1楼 · 发布于 2024-09-29 01:33:23

您只需使用^{}设置全文曲面的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)

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

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

在显示屏更新之前,在屏幕顶部混合表面

while True:
    # [...]

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

相关问题 更多 >