Как «вставить» спрайты в окно за заданное время

#python #pygame #sprite #blit

#python #pygame #спрайт #блит

Вопрос:

Я искал другие похожие потоки, но ничего не нашел. что я хочу иметь возможность, так это вставлять спрайт в окно, скажем, на 5 секунд (5000 миллисекунд), и по истечении времени он разблокирует его. Спасибо.

 class Flag():

    def Flagrun(self):
        flaggen = str(randint(1,4))
        global milliseconds
        global flagactive
        if flaggen == '1':
            flag_x = 58
            flag_y = 89

        elif flaggen == '2':
            flag_x = 464
            flag_y = 82            

        elif flaggen == '3':
            flag_x = 343
            flag_y = 215

        elif flaggen == '4':
            flag_x = 66
            flag_y = 535

        window.blit(flag, (flag_x,flag_y))
        collisiondet()
        milliseconds  = clock.tick_busy_loop(60)
        print(milliseconds)
        flagactive = 'No'
  

Комментарии:

1. Вы должны опубликовать код в вопросе, а не публиковать, если это необходимо

2. Вам нужно быть более описательным. Будет ли спрайт мигать каждые 5 миллисекунд, или он будет мигать в течение всего пяти секунд в начале программы?

3. итак, когда вызывается этот фрагмент кода, я хочу, чтобы каждый из операторов if или elif передавал flag_x и flag_y свои координаты. не беспокойтесь о самой игре, это было бы слишком сложно объяснить. я хочу, чтобы флаги появлялись каждые 14000 миллисекунд, и каждый из них оставался на экране в течение 4000 миллисекунд. имеет ли это смысл?

4. при запуске установите переменную с помощью current time 5 second . Позже в вашем цикле сравните эту переменную с current time и blit или нет.

5. Я думаю, вы здесь что-то недопонимаете. Если вы хотите что-то «разблокировать», вы просто не размазываете это в следующем кадре. Вы должны получать 40-60 кадров каждую секунду или около того.

Ответ №1:

Есть много способов выполнить то, что вы пытаетесь выполнить. Вы не можете просто «размазать» изображение, вы должны нарисовать поверх него, либо стерев экран, либо перерисуя то, что должно быть за ним.

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

 import pygame, sys
pygame.init()
screen = pygame.display.set_mode([400,100])
clock = pygame.time.Clock()

timer = 0
fps = 60
while 1:
    clock.tick(fps)
    timer  = 1
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
    screen.fill([255,255,255])
    if int(timer/fps)%2==0:
        pygame.draw.circle(screen, [255,0,0], [0,0], 50)
    if int(timer/(fps*2))%2==0:
        pygame.draw.circle(screen, [0,0,255], [100,0], 50)
    if int(timer/(fps*3))%2==0:
        pygame.draw.circle(screen, [0,255,0], [200,0], 50)
    if int(timer/fps)%3==0:
        pygame.draw.circle(screen, [255,255,0], [300,0], 50)
    pygame.display.flip()
  

Вы должны быть в состоянии включить что-то подобное в свою программу. Если вы не знаете, как это сделать, пожалуйста, внесите свой код, чтобы я мог представить это в контексте. Я не смог протестировать этот код (используя школьный компьютер), но он должен сработать. Если у вас есть какие-либо дополнительные вопросы, просто оставьте их в комментарии ниже, и я отвечу на них как можно скорее.