1

我想每隔(一些)秒产生一个敌人,比如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()

但这对我来说似乎是不好的做法。

4

1 回答 1

2

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()重复创建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() 

    # [...]
于 2020-10-18T16:42:13.270 回答