Python 如何在特定的时间间隔连续触发动作?在游戏中,敌人发射恒定光束而不是子弹

Python 如何在特定的时间间隔连续触发动作?在游戏中,敌人发射恒定光束而不是子弹,python,pygame,projectile,Python,Pygame,Projectile,试图在pygame中制造一个在pygame中直线射击的敌人。我设法让敌人射击,但它不停地发射子弹,而不是将它们隔开。有没有办法把子弹隔开 这是敌人的职业 class Boss(pygame.sprite.Sprite): def __init__(self): pygame.sprite.Sprite.__init__(self) self.image = pygame.Surface((100, 70)) self.image.fill(

试图在pygame中制造一个在pygame中直线射击的敌人。我设法让敌人射击,但它不停地发射子弹,而不是将它们隔开。有没有办法把子弹隔开

这是敌人的职业

class Boss(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((100, 70))
        self.image.fill(white)
        self.rect = self.image.get_rect()
        self.rect.centerx = WIDTH / 2
        self.rect.y = (WIDTH / 2) - 500
        self.speedy = 3

    def update(self):
        self.rect.y += self.speedy
        if self.rect.y >= 30:
            self.rect.y = 30

    def shoot(self):
        bossbullet = Bossbullet(self.rect.centerx, self.rect.bottom)
        all_sprites.add(bossbullet)
        bossbullets.add(bossbullet)


class Bossbullet(pygame.sprite.Sprite):
    def __init__(self, x, y):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((10, 20))
        self.image.fill(white)
        self.rect = self.image.get_rect()
        self.rect.bottom = y
        self.rect.centerx = x
        self.speedy = -10

    def update(self):
        self.rect.y -= self.speedy

        if self.rect.bottom < 0:
            self.kill()

all_sprites = pygame.sprite.Group()
boss = Boss()
all_sprites.add(boss)
bossbullets = pygame.sprite.Group()


我建议使用计时器事件。用于重复创建一个。e、 g:

毫秒延迟=500#0.5秒
bullet_event=pygame.USEREVENT+1
pygame.time.set_计时器(bullet_事件,毫秒延迟)
注意,在pygame中可以定义客户事件。每个事件都需要一个唯一的id。用户事件的id必须从
pygame.USEREVENT
开始。在本例中,
pygame.USEREVENT+1
是计时器事件的事件id,它生成项目符号

在事件循环中发生事件时创建新项目符号:

running=True
运行时:
时钟滴答声(FPS)
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
运行=错误
elif event.type==子弹头事件:
如果boss.rect.y>=30:
老板,开枪

有没有办法让敌人在暂停后暂停一段时间,比如说5枪,然后在暂停后再次开始射击

通过将0传递给time参数,可以停止计时器事件。e、 g:

delay_time=500#0.5秒
暂停时间=3000#3秒
bullet_event=pygame.USEREVENT+1
pygame.time.set_计时器(子弹事件、延迟时间)
无镜头=0
运行=真
运行时:
时钟滴答声(FPS)
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
运行=错误
elif event.type==子弹头事件:
如果boss.rect.y>=30:
老板,开枪
#更改计时器事件时间
如果没有_shots==0:
pygame.time.set_计时器(子弹事件、延迟时间)
无镜头+=1
如果没有放炮==5:
pygame.time.set_计时器(bullet_事件,暂停时间)
无镜头=0
killed=#[…]在killed时设置状态
#停止计时器
如果死亡:
pygame.time.set_计时器(bullet_事件,0)

你能解释一下线路上发生了什么吗
bullet\u event=pygame.USEREVENT+1
对不起,链接错了。在pygame中,您可以定义自己的事件。每个事件都需要一个唯一的id。用户事件的id必须从
pygame.USEREVENT
开始
pygame.USEREVENT+1
是生成项目符号的计时器事件的事件id。
+1
做什么?哦,好的。谢谢你的帮助!我不知道你可以那样使用它。谢谢
running = True
while running:

    clock.tick(FPS)
    if boss.rect.y >= 30:
        boss.shoot()