es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para cambiar el color de la pantalla con más frecuencia y crear un efecto de parpadeo al presionar un botón, podemos usar el método pygame.time.set_timer() para crear un evento de usuario que cambie el color de fondo entre rojo y blanco a intervalos regulares.

    Sin embargo, la implementación actual tiene un problema donde el temporizador no se activa porque está anidado dentro de la declaración if para el evento keydown. Para solucionar esto, podemos mover el temporizador fuera de la declaración if y verificar el evento de usuario en el bucle principal.

    Aquí hay un fragmento de código actualizado que debería lograr el efecto de parpadeo deseado:

    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
    
    #Establece el temporizador para activar USEREVENT cada 250ms 
    pygame.time.set_timer(CHANGE_COLOR, 250)
    
    counter = 0  
    running = True
    
    while running:   
        for event in pygame.event.get():
            if event.type == pygame.KEYDOWN: 
                if event.key == pygame.K_LEFT:
                    # Maneja el efecto de parpadeo al presionar el botón.
                    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")
            elif event.type == CHANGE_COLOR:
                # Maneja el efecto de parpadeo en el temporizador.
                if bg_active_color == RED:
                    screen.fill(RED)
                    bg_active_color = WHITE
                elif bg_active_color == WHITE:
                    screen.fill(WHITE)
                    bg_active_color = RED 
    
            elif event.type == pygame.QUIT:        
                running = False
    
        pygame.display.update()
        timer.tick(30)
    
    pygame.quit()
    

    En este código actualizado, verificamos el evento de usuario en el bucle principal y manejamos el efecto de parpadeo cuando se activa el temporizador, además de cuando se presiona el botón. El temporizador está programado para activar el evento de usuario cada 250ms, lo que debería crear un efecto de parpadeo noticeable.

    Tenga en cuenta que también manejamos el evento de salida para salir del bucle y salir de pygame adecuadamente.

Comments are closed.