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.
Llamada pygame.event.get()
al comienzo del ciclo while.
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.
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:
repl.it/@Rabbid76/PyGame-MinimalApplicationLoop
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