如何高效地在 pygame 中创建计时器?
How to create timers in pygame efficiently?
我想每(某个数字)秒产生一个敌人,比如说 5。
我能做到:
start_time = pygame.time.get_ticks()
if pygame.time.get_ticks() - start_time >= (some number):
spawn_enemy()
但这有一个问题:当我将 FPS (clock.tick()
) 从 120 更改为 60 时,敌人的生成率将保持不变。
我也可以做一个变量:
var = 0
while True:
var += 1
if var >= (some number):
spawn_enemy()
但这对我来说似乎是不好的做法。
pygame.time.get_ticks()
测量时间。它不会中继每秒的帧数。
您可以定义一个时间跨度。当超过时间跨度时,生成一个敌人并增加时间:
next_enemy_time = 0
run = True
while run:
# [...]
if pygame.time.get_ticks() > next_enemy_time:
next_enemy_time += 5000 # 5 seconds
spawn_enemy()
# [...]
或者,您可以使用计时器事件。使用 pygame.time.set_timer()
to repeatedly create an USEREVENT
。例如:
time_delay = 5000 # 5 seconds
timer_event = pygame.USEREVENT + 1
pygame.time.set_timer(timer_event, time_delay)
run = True
while run:
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
elif event.type == timer_event:
spawn_enemy()
# [...]
我想每(某个数字)秒产生一个敌人,比如说 5。
我能做到:
start_time = pygame.time.get_ticks()
if pygame.time.get_ticks() - start_time >= (some number):
spawn_enemy()
但这有一个问题:当我将 FPS (clock.tick()
) 从 120 更改为 60 时,敌人的生成率将保持不变。
我也可以做一个变量:
var = 0
while True:
var += 1
if var >= (some number):
spawn_enemy()
但这对我来说似乎是不好的做法。
pygame.time.get_ticks()
测量时间。它不会中继每秒的帧数。
您可以定义一个时间跨度。当超过时间跨度时,生成一个敌人并增加时间:
next_enemy_time = 0
run = True
while run:
# [...]
if pygame.time.get_ticks() > next_enemy_time:
next_enemy_time += 5000 # 5 seconds
spawn_enemy()
# [...]
或者,您可以使用计时器事件。使用 pygame.time.set_timer()
to repeatedly create an USEREVENT
。例如:
time_delay = 5000 # 5 seconds
timer_event = pygame.USEREVENT + 1
pygame.time.set_timer(timer_event, time_delay)
run = True
while run:
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
elif event.type == timer_event:
spawn_enemy()
# [...]