Проблема с нерестовым объектом - PullRequest
0 голосов
/ 08 мая 2019

Я пытаюсь заставить объекты появляться на экране. Но они, похоже, не подходят.

При выходе из игры появляются спрайты. Только во время игры вы не можете видеть объекты.

Exit = False 


while not Exit:
    clock.tick(60)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

            if event.type == QUIT:
            Exit = True

        elif event.type == USEREVENT +1:
            fireball.add(fire(screen, random.randint(50,1000), random.randint(50,800)))

    fireball.update()
    fireball.draw(screen)


    pygame.display.flip()

1 Ответ

0 голосов
/ 09 мая 2019

Поскольку вы не сообщите нам, я предполагаю, что fireball - это sprite.Group, а fire - дочерний класс sprite.Sprite.Из всего, что я вижу, похоже, правильное предположение.
Итак, вы хотите создать и добавить fire экземпляров в группу fireball во время игры.

Вы можете достичь этогодобавив следующие строки в основной цикл перед firefall.update():

newev = pygame.event.Event(USEREVENT+1)
pygame.event.post(newev)

Это создаст пользовательское событие типа USEREVENT+1, которое будет перехватываться циклом проверки событий на следующей итерации, выполняя, следовательно, строку: fireball.add(fire(screen, random.randint(50,1000), random.randint(50,800)))

Возможно, вы не хотите создавать новый fire спрайт на каждой итерации.В этом случае вы должны добавить некоторый контроль потока, чтобы пропустить эти строки при некоторых условиях.

Например, если вы хотите случайный подход, вы можете сделать:

if random.random() < 0.1:
    newev = pygame.event.Event(USEREVENT+1)
    pygame.event.post(newev)

В этом случае,На каждой итерации основного цикла у вас есть 10% вероятности отправить пользовательское событие.Отрегулируйте вероятность под свои костюмы.

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

checktime = pygame.time.get_ticks() - reftime
if checktime > 5000: #5 seconds, the time is in milliseconds
    reftime = pygame.time.get_ticks() #reset the reference time
    newev = pygame.event.Event(USEREVENT+1)
    pygame.event.post(newev)

И, конечно, не забудьте определить reftime = pygame.time.get_ticks() в первый раз перед основным циклом.Вы можете обратиться к этому ответу для другого примера того, как измерять время с помощью pygame.

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