У меня есть простой текстовый код печати pygame. Когда он запускается, он открывает окно pygame, а затем вылетает.
Я проверял несколько раз, если я ничего не пропустил, но я не могу найти ничего неправильного.
Код
import pygame
from pygame.locals import *
def draw():
pygame.init();
screen=pygame.display.set_mode((1600, 900))
pygame.display.set_caption("Damn")
font = pygame.font.Font('freesansbold.ttf', 32)
text = font.render('0', True, (0, 0, 0))
textRect=text.get_rect()
textRect.center=(800, 450)
while True:
screen.fill((255, 255, 255))
screen.blit(text, textRect)
for event in pygame.event.get():
if event.type -- pygame.QUIT:
pygame.quit()
pygame.display.update()
if __name__= = "__main__":
draw();
Ошибка
Traceback (most recent call last):
File "C:/Users/Ienovo/PycharmProjects/untitled/Base.py", line 23, in <module>
draw();
File "C:/Users/Ienovo/PycharmProjects/untitled/Base.py", line 20, in draw
pygame.display.update()
pygame.error: video system not initialized
Ожидаемым результатом должен быть «0», напечатанный в центре.
Состояние:
if event.type -- pygame.QUIT: pygame.quit()
оценивает всегда True
.
Должно быть:
if event.type == pygame.QUIT:
pygame.quit()
Оператор равенства ==
. См. Операторы.
Значение event.type -- pygame.QUIT
равно event.type
минус -pygame.QUIT
.
pygame.quit()
деинициализирует все модули pygame и вызывает сбой кода при следующей инструкции, которая пытается получить доступ к модулю pygame.
Обновление отображения pygame.display.update()
должно быть выполнено один раз в рамках основного цикла, а не цикла событий:
def draw():
# [...]
run = True
while True:
screen.fill((255, 255, 255))
screen.blit(text, textRect)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
# <---
pygame.display.update()
pygame.quit()
Спасибо, у pycharm странный вид, поэтому я не понимаю этого!