python - 如何使用 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()
解决方案
您需要做的就是设置全文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()
推荐阅读
- javascript - 从 Java Spring 下载 - OpenWith/Save 对话框在完成之前不会出现
- android - Android 应用程序崩溃而没有任何堆栈跟踪错误
- java - 如何将 TableView (JavaFX11) 拆分为 n 个部分以保存为 png
- windows - 更改密码后 Dynatrace 登录失败
- kubernetes - Traefik 入口粘性会话哈希值
- python - Python asyncio:处理gather()中的异常-文档不清楚?
- laravel - 如果 api 返回 json,则 Laravel 异常,如果网站返回默认页面
- c# - 以统一格式重命名 C# 中多个文件的副本
- sql - T-SQL 输出插入子句 - 访问不在插入/删除表中的数据
- java - 向我隐藏其他应用程序 - 如何?