2017-02-06 7 views
1

Я пытаюсь использовать pygame для показа игровой сцены, но, похоже, она перестала работать для меня: она отображает не что иное, как серое окно на любом экране, который я создаю, пока pygame не выключится , то то, что должно быть на экране, кратковременно мигает, прежде чем оно выйдет. Например, минимальный код ниже показывает серый экран в течение 5 секунд, а затем мигает черный быстро и квиты:pygame показывает только серые окна на экране

import pygame as pg 
import time 
pg.init() 
sc = pg.display.set_mode((600,600)) 
sc.fill((0,0,0)) 
pg.display.flip() 
time.sleep(5) 

Это, как представляется, проблема с отображением экрана и не Pygame себя, так как я могу сделать поверхности и сохраните их в файлы изображений с помощью pg.image.save(), и они выглядят прекрасно.

Это первый раз, когда я попытался использовать pygame для отображения на экране с момента моего обновления до OSX 10.12. Это использует Python 2.7 и pygame 1.9.3 (загружен из pip, но также и проблема с версией dev 1.9.4 от bitbucket). Все зависимости sdl находятся на последней версии (по словам доморощенного).

Тем не менее, теперь я теряюсь за то, как сделать больше проблем с поиском, поскольку я не знаю достаточно о том, как pygame взаимодействует с дисплеем. Есть ли что-нибудь еще, что я могу сделать, чтобы помочь найти корень этой проблемы и исправить ее?

Спасибо!

+2

Это не то, как работает pygame. Вы не можете просто использовать time.sleep() для отображения вещей, потому что pygame специально разработан для создания основного цикла. – Natecat

ответ

1

Вам нужен игровой цикл, который постоянно делает следующее:

  • вызовов pygame.display.flip() - это обновление экрана с новыми изменениями
  • звонков pygame.event.get() - это самое главное, потому что в противном случае очередь событий не будет очищена, и ОС будет считать, что ваша программа не отвечает. Вы не можете иметь такие вещи, как sleep(5) в PyGame.
+0

Спасибо! Кажется, это был вызов event.get(). Наверное, я всегда использовал его в прошлом и не знал, что это требование. Но вам не нужен цикл - код работает нормально, если я добавлю pg.event.get() сразу после pg.display.flip() – user2048508

+0

Он отобразит, да. Но вам все равно нужен цикл. Приложение не отвечает, когда оно не активно и постоянно перекачивает очередь событий. Например, попытка закрытия или перемещения окна в течение этих 5 секунд. –