Я хочу начать свой основной игровой цикл с surface.fill(WHITE)
, чтобы перекрасить экран в белый цвет, но все поверхности из последнего кадра по-прежнему отображаются.
Чтобы продемонстрировать, следующий пример наносит красную поверхность на зеленую поверхность. Блит создается триггером события каждую 1 секунду. Однако красная поверхность не исчезает, если она не активируется событием.
import pygame as pg
pg.init()
GREEN, WHITE, RED = (60, 120, 60), (255,255,255), (120, 60, 60)
screen = pg.display.set_mode((200, 200))
box = pg.Surface((150, 150))
box.fill(GREEN)
running = True
EVENT_SECOND_TIMER = pg.event.custom_type()
pg.time.set_timer(EVENT_SECOND_TIMER, 1000)
while running:
screen.fill(WHITE)
for event in pg.event.get():
# Draw circle every second
if event.type == EVENT_SECOND_TIMER:
surf = pg.Surface((50,50))
surf.fill(RED)
box.blit(surf, (50, 50))
screen.blit(box, (25, 25))
pg.display.update()
@KarlKnechtel, точка зрения принята. Я думал, что хотя бы перефразирую.
Если вы хотите рисовать что-то постоянно, вы должны рисовать это в цикле приложения. Если вы хотите видеть surf
вместо box
для изображения, вам нужно установить переменную состояния и отрисовать сцену в зависимости от состояния. Сбросьте переменную состояния после отрисовки сцены:
import pygame as pg
pg.init()
GREEN, WHITE, RED = (60, 120, 60), (255,255,255), (120, 60, 60)
screen = pg.display.set_mode((200, 200))
clock = pg.time.Clock()
box = pg.Surface((150, 150))
box.fill(GREEN)
surf = pg.Surface((50,50))
surf.fill(RED)
EVENT_SECOND_TIMER = pg.event.custom_type()
pg.time.set_timer(EVENT_SECOND_TIMER, 1000)
running = True
while running:
clock.tick(60)
draw_surf = False
for event in pg.event.get():
if event.type == pg.QUIT:
running = False
if event.type == EVENT_SECOND_TIMER:
draw_surf = True
screen.fill(WHITE)
screen.blit(box, (25, 25))
if draw_surf:
screen.blit(surf, (50, 50))
pg.display.update()
pg.quit()
удивительно, спасибо. У меня сложилось впечатление, что я могу ударить поверхность поверх другой поверхности. Нужно ли отображать все поверхности напрямую, чтобы они обновлялись?
Причина, по которой я спрашиваю, заключается в том, что я создаю поверхность для игрового фона, которая движется так, что дисплей (экран) просматривает только часть фона (аналогично игре с боковой прокруткой).
Теперь я понимаю, что вы должны явно очищать хост-поверхность, если вы собираетесь переносить на нее, так как блит-поверхности оставались блит-поверхностями до тех пор, пока хост-поверхность не будет очищена. В моем случае я очистил дисплей и фон. Маркировка завершена. Я ценю ваше общение
Добро пожаловать обратно в Stack Overflow. "и я был бы признателен за любую помощь." Большинство людей так бы и поступили, но сайт работает не так . Пожалуйста, сначала определите конкретную проблему, а затем задайте четкий, конкретный вопрос. Например, если есть сообщение об ошибке, то попытайтесь найти причину, найдите существующий ответ и, наконец, создайте минимально воспроизводимый пример, чтобы задать вопрос. Если код запускается, но делает что-то не так, то также объясните, что не так.