Pygame 每 10 秒新敌人?

Pygame new enemy every 10sec?

抱歉,这个问题可能是重复的,但我已经搜索了很多关于这个主题的内容,但我无能为力。那么我怎样才能每 10 秒将一个新敌人 blit 到屏幕上呢? 顺便说一句,我想使用 USEREVENTS 来实现它,因为我正在学习它们。 我真的遇到这种事件的麻烦,我无法得到它们,这就是我试过的:

a = 10000
for event in pygame.event.get():
    if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_e:
            pygame.time.set_timer(pygame.USEREVENT+1, a)
if a == 0:
    screen.blit(enemy, (enemyX, enemyY))
    a = 5000

在 pygame 中存在一个定时器事件。在事件队列中使用 pygame.time.set_timer() to repeatedly create a USEREVENT。时间必须以毫秒为单位设置。例如:

timer_interval = 10000 # 10 seconds
timer_event = pygame.USEREVENT + 1
pygame.time.set_timer(timer_event, timer_interval)

请注意,在 pygame 中可以定义客户事件。每个事件都需要一个唯一的 ID。用户事件的 ID 必须介于 pygame.USEREVENT (24) 和 pygame.NUMEVENTS (32) 之间。在这种情况下,pygame.USEREVENT+1 是定时器事件的事件 ID。

在事件循环中接收事件:

run = True
while run:

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

         elif event.type == timer_event:
             # [...]

可以通过将 0 传递给 pygame.time.set_timertime 参数来停止计时器事件。


注意,你必须使用列表来管理敌人。事件发生时将新的敌人位置添加到列表中。循环遍历敌人。在循环中移动并绘制敌人:

timer_interval = 10000 # 10 seconds
timer_event = pygame.USEREVENT + 1
pygame.time.set_timer(timer_event, timer_interval)

enemy_list = []

run = True
while run:

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

         elif event.type == timer_event:
             # [...]

             enemy_list.append([enemyX, enemyY])  

    # [...]

    for enemy_pos in enemy_list:
        screen.blit(enemy, enemy_pos)