如何在 PyGame 中使文本闪烁?

时间:2021-06-17 12:15:32

标签: python text pygame

像这样,但它不必淡出或任何其他高级方式。

font_fade = pygame.USEREVENT + 1
pygame.time.set_timer(font_fade, 1)
if event.type == pygame.KEYDOWN:
    click_to_start()
    
if event.type == font_fade:
    text('press  any  button  to  start', (0, 0, 0), screen, screen.get_width() / 2, screen.get_height() - 70, 20)

我曾尝试使用 USEREVENT,但它闪烁得太快,有时不起作用

1 个答案:

答案 0 :(得分:0)

pygame.time.set_timer 的时间单位是毫秒。如果要定义 1 秒的间隔,则指定时间为 1000 毫秒:

pygame.time.set_timer(font_fade, 1)

pygame.time.set_timer(font_fade, 1000)

您需要在应用程序循环中绘制文本。如果你想要一个闪烁的文本,你必须绘制一次而不是一次绘制。
添加布尔变量 show_text。事件发生时切换变量。根据变量绘制文本:

while True:
    for event in pygame.event.get():
        # [...]

        if event.type == font_fade:
            show_text = not show_text     

    # [...]

    if show_text:
        text('press  any  button  to  start', (0, 0, 0), screen, screen.get_width() / 2, screen.get_height() - 70, 20)

最小示例:

import pygame

pygame.init()
window = pygame.display.set_mode((500, 100))
clock = pygame.time.Clock()

font_fade = pygame.USEREVENT + 1
pygame.time.set_timer(font_fade, 200)

font = pygame.font.SysFont(None, 40)
text_surf = font.render('press  any  button  to  start', True, (255, 255, 0))    
show_text = True

run = True
while run:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False     
        if event.type == font_fade:
            show_text = not show_text     

    window.fill(0)
    if show_text:
        window.blit(text_surf, text_surf.get_rect(center = window.get_rect().center))
    pygame.display.flip()
    clock.tick(60)

pygame.quit()
exit()