La ventana de Pygame no responde después de unos segundos

2 minutos de lectura

La ventana de Pygame no responde despues de unos segundos
Fred

Este simple fragmento de código falla (la ventana no responde) después de unos segundos (alrededor de 5).

import pygame
from pygame.locals import *

pygame.init()
screen = pygame.display.set_mode((640, 480), 0, 24)
#clock = pygame.time.Clock()

#font = pygame.font.Font(None, 32)

cycles = 0
while True:
    screen.fill(0)
#    text = font.render('Cycles : %d' % cycles, True, (255, 255, 255))
#    screen.blit(text, (100, 100))

    cycles += 1

    pygame.display.update()

Si descomento las líneas comentadas, puedo ver claramente que el programa se sale de control al mostrar valores entre 47 y 50.

Uso python 2.7 y pygame 1.9.2, Windows 8 (64 bits) y Eclipse + PyDev.

  • Solo puedo decir: funciona en Python 2.7, PyGame 1.9.2, Linux Mint (32 bits), Geany. ¿Lo ejecutas desde Eclipse o terminal?

    – furas

    23 de noviembre de 2013 a las 18:29

1646970247 284 La ventana de Pygame no responde despues de unos segundos
usuario2746752

Llamada pygame.event.get() al comienzo del ciclo while.

  • ¡Guau! ¡Inteligente! ¡Era exactamente eso! Gracias

    – Fred

    23 de noviembre de 2013 a las 21:39

  • Si no hace nada con los eventos de pygame, entonces podría usar pygame.event.pump en lugar de pygame.event.get. “Si no realiza una llamada a la cola de eventos durante demasiado tiempo, el sistema puede decidir que su programa se ha bloqueado”. pygame.org/docs/ref/event.html#pygame.event.pump

    – gentimouton

    10/04/2014 a las 22:44


Pygame necesita for event in pygameeventget para no fallar
Ted Klein Bergman

Necesita hacer una llamada regular a una de las cuatro funciones en el pygame.event módulo para que pygame interactúe internamente con su sistema operativo. De lo contrario, el sistema operativo pensará que su juego se ha bloqueado. Así que asegúrese de llamar a uno de estos:

  • pygame.event.get() devuelve una lista de todos los eventos actualmente en la cola de eventos.
  • pygame.event.poll() devuelve un solo evento de la cola de eventos o pygame.NOEVENT si la cola está vacía.
  • pygame.event.wait() devuelve un solo evento de la cola de eventos o espera hasta que se pueda devolver un evento.
  • pygame.event.pump() permite que pygame maneje acciones internas. Útil cuando no desea manejar eventos de la cola de eventos.

1646970249 565 La ventana de Pygame no responde despues de unos segundos
Rabbid76

La ventana no responde (congelar), porque no maneja los eventos. Tienes que manejar los eventos ya sea pygame.event.pump() o pygame.event.get()para que la ventana siga respondiendo.

Consulte la documentación de pygame.event.pump():

Para cada cuadro de su juego, deberá realizar algún tipo de llamada a la cola de eventos. Esto asegura que su programa pueda interactuar internamente con el resto del sistema operativo.

Agregue un bucle de eventos, por ejemplo:

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

    # [...]

Alternativamente, simplemente bombee los eventos:

while True:
    pygame.event.pump()

    # [...]

Ejemplo mínimo: 1641759956 725 Como convertir el sprite en pygame mientras te mueves con repl.it/@Rabbid76/PyGame-MinimalApplicationLoop

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad