I have a pygame
event (called bubble_spawn_event), which has an interval (called bubble_spawn_interval) of 1000. How do I make that interval go down by say, 0.1 seconds every 10 seconds?
I've tried to create a separate event (called bubble_interval_change_event) that has an interval (bubble_interval_change_interval) of 10 seconds, and when that event happens, decrease the bubble_spawn_interval
by 0.1 seconds, then call pygame.time.set_timer()
on the same event. (bubble_spawn_event)
I have defined the bubble spawn event and interval as following:
bubble_spawn_event = USEREVENT
bubble_spawn_interval = 1000
pygame.time.set_timer(bubble_spawn_event, bubble_spawn_interval)
The interval change event and interval have been defined as following:
bubble_interval_change_event = USEREVENT + 1
bubble_interval_change_interval = 10000
My attempt on changing the bubble spawn interval:
elif event.type == bubble_interval_change_event:
bubble_spawn_interval -= 200
pygame.time.set_timer(bubble_spawn_event, bubble_spawn_interval)
My full main loop:
while running:
for event in pygame.event.get():
if event.type == QUIT:
running = False
elif event.type == bubble_spawn_event:
bubbles.add(Bubble(screen, random.randint(100, screen.get_width() - 100), screen.get_height()))
elif event.type == bubble_interval_change_event:
pygame.time.set_timer(bubble_spawn_event, 0)
bubble_spawn_interval -= 200
pygame.time.set_timer(bubble_spawn_event, bubble_spawn_interval)
screen.blit(bg_image, (0, 0))
bubbles.update()
for bubble in bubbles:
bubble.screen.blit(bubble.image, bubble.rect)
bubble.move()
pygame.display.update()
clock.tick(60)
pygame.quit()
The problem is that the bubble spawn interval doesn't go down at all, even when I decrease the interval by 0.9 seconds.
You are apparently not resetting the timer:
import pygame
import random
pygame.init()
screen = pygame.display.set_mode((700, 400))
spawn_bubble = pygame.USEREVENT
spawn_bubble_timer = 1000
pygame.time.set_timer(spawn_bubble, spawn_bubble_timer)
reduce_timer = spawn_bubble + 1
reduce_timer_timer = 5000
pygame.time.set_timer(reduce_timer, reduce_timer_timer)
run = True
while run:
pygame.time.Clock().tick(10)
screen.fill((0, 0, 0))
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
if event.type == spawn_bubble:
pygame.draw.circle(screen, (255, 0, 0),
(random.randint(0, 700), random.randint(0, 400)), 5)
if event.type == reduce_timer:
pygame.time.set_timer(spawn_bubble, 0)
spawn_bubble_timer -= 200
if spawn_bubble_timer <= 0:
spawn_bubble_timer = 200
pygame.time.set_timer(spawn_bubble, spawn_bubble_timer)
pygame.display.update()
pygame.quit()
Notice the line pygame.time.set_timer(spawn_bubble, 0)
, it removes the timer from that event. If you run this code you will see that as time progresses, the dots start appearing faster and faster. (capped at 200 ms so that it doesn't cancel itself or go into negatives, actually when capped could also cancel the reduce_timer
event scheduling)
P.S. this is literally the very first time I have used the .set_timer()
method