Заставьте фигуру исчезнуть в Pygame, а затем снова появиться - PullRequest
2 голосов
/ 20 октября 2019

Я пытаюсь нарисовать картинку в пигме. Я держу это открытым в течение определенного количества времени, и нет никакого пользовательского влияния. Мне было интересно, как я могу заставить объект появляться, исчезать, а затем снова появляться через определенное время, в то время как другие фигуры остаются такими же, как и в течение определенного времени. Я пытаюсь заставить прямоугольник мерцать между желтым и черным непрерывно в течение времени, которое я установил, чтобы весь код оставался. Можно ли это сделать?

я попытался добавить pygame.draw.rect(screen, BLACK, (300, 200, 100, 125) pygame.display.flip() pygame.time.wait(1000), который работает, однако, он изменяет остальную часть кода перед этим, чтобы остаться на то же количество времени

1 Ответ

2 голосов
/ 20 октября 2019

Конечно, это возможно. Pygame имеет довольно низкий уровень: наличие и исчезновение объекта означает, что вы должны нарисовать его на экране, удалить его с экрана, перерисовать, удалить и т. Д.

На самом деле Pygame не имеет функции для "удалять". Чтобы удалить, вы должны нарисовать что-то еще поверх фигуры: пиксели меняют цвет для представления новой фигуры, а предыдущая «удаляется». Поэтому для удаления вы обычно рисуете прямоугольник, окрашенный в цвет фона.

В вашем случае мерцающий прямоугольник можно получить, рисуя прямоугольники в чередующихся цветах в одной и той же позиции на каждой итерации. В следующем примере показано, как это сделать:

import sys
import pygame

#some definitions
YELLOW = (255, 255, 0)
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)

#initial set up
pygame.init()
screen = pygame.display.set_mode((600, 600))

#making the screen white
screen.fill(WHITE)

#drawing a circle
pygame.draw.circle(screen, YELLOW, (120, 120), 100)

counter = 0
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()

    #select color for rectange, each iteration alternate color to make flickering
    if counter % 2 == 0:
        fl_color = YELLOW
    else:
        fl_color = BLACK

    #drawing the rectangle
    pygame.draw.rect(screen, fl_color, (10, 300, 400, 250))
    pygame.display.flip()
    counter += 1
    pygame.time.wait(1000) #in milliseconds

Как видите, круг остается желтым, так как поверх него мы никогда не рисуем что-то новое. Прямоугольник мигает с частотой 1 секунда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...