Pygame - текст не появится в окне

Вопрос задан: 8 месяцев назад Последняя активность: 8 месяцев назад
up 0 down

Я отображал некоторый текст в окне, но когда я выполнил код, он показывал только пустое черное окно. Я понятия не имел, что случилось, так как исключений не было. Это просто не будет работать.

Ну, я абсолютный новичок, который только что прошел несколько курсов Python в течение нескольких недель, так что я просто играл над модулем pygame вместо того, чтобы иметь большие планы, такие как разработка игр. Я также пытался искать похожие проблемы, но все они настолько сложны, что я не могу понять их из-за длинных фрагментов кода. Я проверил, и никакой синтаксис неправильный, файл шрифта присутствует, и имена объектов находятся в правильном месте, то есть они не используют неправильные методы. я не знаю, что еще я могу попробовать...

import pygame as pg

pg.init()

win = pg.display.set_mode((720,540))

consolas = pg.font.SysFont("Consolas.ttf", 100)

text = consolas.render("hello", False , (255,255,255))

win.blit(text , (0,0))

я ожидал, что строка "привет" будет вспыхивать на поверхности размером 100 и цвет будет полностью белым, но все это не обнаружилось вообще.

3 ответа

up 0 down

Вам нужно использовать pg.display.update() или pg.display.flip() после того, как вы нарисовали текст, т.е. после линии win.blit. Разницу и использование этих двух можно найти здесь: Разница между pygame.display.update и pygame.display.flip

up 0 down accepted

Вы должны позвонить pygame.display.flip или же pygame.display.update на самом деле обновить экран с содержимым поверхности выигрыша.

Кроме того, у вас должен быть главный цикл, который обрабатывает события, вызывая pygame.event.get. Это гарантирует, что ваше окно остается открытым. Кроме того, если вы не обрабатываете события, ваше окно перестает отвечать на запросы и, возможно, даже ничего не рисует (в зависимости от вашей ОС/оконного менеджера)

Поэтому добавьте в свой код:

run = True
while run:
for e in pg.event.get():
    if e.type == pg.QUIT:
        run = False
    pg.display.update()
up -1 down

Как люди уже прокомментировали, что вам нужно позвонить pygame.display.update() или же pygame.display.flip()Вот полный код:

import pygame as pg

pg.init()

win = pg.display.set_mode((720,540))

consolas = pg.font.SysFont("Consolas.ttf", 100)
running = True
while running:
    text = consolas.render("hello", False , (255,255,255))
    for event in pg.event.get():
        if event.type == pg.QUIT:
            running = False
    win.blit(text , (0,0))
    pg.display.flip()
pg.quit()