Почему мой ноутбук Jupyter продолжает зависать при рендеринге текста в Pygame? - PullRequest
0 голосов
/ 04 ноября 2019

Я использую ноутбук Jupyter для создания py-игры. Я заметил, что КАЖДЫЙ РАЗ я рендерину какой-нибудь текст в игре, ноутбук рухнет. Это работает, когда я запускаю игру, и текст отображается как ожидалось. Однако, когда я закрываю окно игры и пытаюсь запустить код во второй раз, он рухнет. Иногда это работает на пару попыток, но в какой-то момент рухнет. В других случаях ноутбук просто падает, как только я закрываю окно игры.

Соответствующая часть кода будет выглядеть так:

import pygame

pygame.init()
run=True
#screensize
screensize = (width,height)=(600,600)
screen = pygame.display.set_mode(screensize)

#font used for the text
myfont = pygame.font.SysFont('Comic Sans MS', 30)
#the text that will be rendered. It is usually some variable value, but the problem remains even if it is constant:
vel=3.001


while run:
    pygame.time.delay(20)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run=False 
    screen.fill((0,0,0))
    ########rendering the text############
    textsurface = myfont.render(str(int(vel)), False, (0, 100, 100))
    screen.blit(textsurface,(200,400))
    ######################################

    pygame.display.update()

pygame.quit()

Допустим, я запускаю код, и я закрываюокно. Если я попытаюсь снова запустить код, появится сообщение:

Le noyau semble planté. Il va redémarrer automatiquement.

(ядро, похоже, умерло, оно автоматически перезапустится)

Мне посоветовали не использовать pygame с блокнотом jupyter, ноЯ просто не могу писать код вне этой среды.

1 Ответ

1 голос
/ 05 ноября 2019

Как предложено пользователем 'furas' выше, активируйте pygame один раз и замените pygame.init () на pygame.display.init ();и pygame.quit () от pygame.display.quit () решили эту проблему для меня. Не уверен, подразумевает ли это использование большего количества ресурсов, но на моем довольно простом ноутбуке проблем не возникло.

import pygame
pygame.init()

В другой ячейке:

pygame.display.init()
run=True
#screensize
screensize = (width,height)=(600,600)
screen = pygame.display.set_mode(screensize)

#font used for the text
myfont = pygame.font.SysFont('Comic Sans MS', 30)
#the text that will be rendered. It is usually some variable value, but the problem remains even if it is constant:
vel=3.001


while run:
    pygame.time.delay(20)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run=False 
    screen.fill((0,0,0))
    ########rendering the text############
    textsurface = myfont.render(str(int(vel)), False, (0, 100, 100))
    screen.blit(textsurface,(200,400))
    ######################################

    pygame.display.update()

pygame.display.quit()
...