如何让敌人在 pygame 中以小延迟随机发射子弹

how to make the enemy shoot bullets randomly with small delay in pygame

我看过其他线程,但他们说使用 pygame.time.set_timer(x, y) 但这似乎对我不起作用,它仍然以零延迟超快地拍摄而且我没有想法为什么。我想要的是让敌人随机射击但至少有半秒的延迟。 (nme_game 是敌人的矩形,nme_game_bullet 应该是来自敌人的子弹)

代码如下:

def nme_shooting(nme_game, nme_game_bullet):
    bullet = pygame.Rect(nme_game.x + nme_game.width / 2.2 + 1, nme_game.y, 5, 25)
    nme_game_bullet.append(bullet)
    nme_game_bullet = USEREVENT + 1
    pygame.time.set_timer(nme_game_bullet, 500)

nme_game_bullet 不能同时是列表(或 Group)和事件类型。

你必须在事件循环中处理这个。创建 nme_game_bullet_event 事件类型。仅当您收到 类型 事件 nme_game_bullet_event:

时才会产生子弹
nme_game_bullet_event = USEREVENT + 1
pygame.time.set_timer(nme_game_bullet_event, 500)

# application loop
run = True
while run: 
    
    # event loop
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False 

        if event.type == nme_game_bullet_event:
            bullet = pygame.Rect(nme_game.x + nme_game.width / 2.2 + 1, nme_game.y, 5, 25)
            nme_game_bullet.append(bullet)

    # [...]

或者将事件或事件列表传递给 nme_shooting 函数:

def nme_shooting(nme_game_bullet, event_list):
    for event in event_list:
        if event.type == nme_game_bullet_event:
            bullet = pygame.Rect(nme_game.x + nme_game.width / 2.2 + 1, nme_game.y, 5, 25)
            nme_game_bullet.append(bullet)
    
nme_game_bullet_event = USEREVENT + 1
pygame.time.set_timer(nme_game_bullet_event, 500)

# application loop
run = True
while run: 

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

    nme_shooting(nme_game_bullet, event_list)

    # [...]