Поскольку вы не сообщите нам, я предполагаю, что 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.