我怎样才能用 pygame.time.set_timer 停止无限循环

how can i stop the endless loop with pygame.time.set_timer

想要更频繁地更改屏幕颜色。它应该是某种闪烁。 这应该在按下按钮时发生。 但是程序死循环了。

import pygame
pygame.init()
 
screen = pygame.display.set_mode((500, 500))
timer = pygame.time.Clock()

WHITE = (255, 255, 255)
RED = (255, 0, 0)

bg_active_color = WHITE
screen.fill(WHITE) 
CHANGE_COLOR = pygame.USEREVENT + 1

pygame.time.set_timer(CHANGE_COLOR, 500)
counter = 0  
running = True
while running:   
        for event in pygame.event.get():
            if event.type == pygame.KEYDOWN: 
                if event.key == pygame.K_LEFT:                
                    if event.type == CHANGE_COLOR:
                        counter += 1                      
                        if counter < 4:
                            if bg_active_color == RED:
                                screen.fill(RED)
                                bg_active_color = WHITE
                            elif bg_active_color == WHITE:
                                screen.fill(WHITE)
                                bg_active_color = RED 
                        else:
                            pygame.time.set_timer(CHANGE_COLOR,0)
                            print("end")
                    
            
                    if event.type == pygame.QUIT:        
                        running = False
     
        pygame.display.update()

        timer.tick(30)
  
pygame.quit()

您不能嵌套事件。您必须在 if-elif-else 语句中测试事件类型。检查 LEFT 是否与 KEYDOWN 事件和 K_LEFT 键一起按下并启动计时器。不要在事件循环中调用 fill。更改 bg_active_color 变量就足够了:

import pygame
pygame.init()
 
screen = pygame.display.set_mode((500, 500))
timer = pygame.time.Clock()

WHITE = (255, 255, 255)
RED = (255, 0, 0)
bg_active_color = WHITE
CHANGE_COLOR = pygame.USEREVENT + 1
counter = 0  
running = True
while running:   
    for event in pygame.event.get():
        if event.type == pygame.QUIT:        
                running = False
        
        elif event.type == pygame.KEYDOWN: 
            if event.key == pygame.K_LEFT:    
                pygame.time.set_timer(CHANGE_COLOR, 500)
                counter = 0
        
        elif event.type == CHANGE_COLOR:                     
            if counter < 4:
                if bg_active_color == RED:
                    bg_active_color = WHITE
                elif bg_active_color == WHITE:
                    bg_active_color = RED 
            else:
                pygame.time.set_timer(CHANGE_COLOR,0)
                print("end")    
            counter += 1      
    
    screen.fill(bg_active_color) 

    pygame.display.update()
    timer.tick(30)
  
pygame.quit()