首页 > 解决方案 > Pygame 创建无限数量的敌人

问题描述


class Enemy:
    def __init__(self, x, y):
        self.x = x
        self.y = y
        self.speedx = 10
        self.speedy = 10
        self.randomint = random.randint(0, 3)

    def draw(self, screen):
        screen.blit(enemyImage, (self.x, self.y))

    def move(self):
        if self.randomint == 0:
                self.x -= self.speedx
                self.y -= self.speedy
        if self.randomint == 1:
                self.x += self.speedx
                self.y -= self.speedy
        if self.randomint == 2:
                self.x -= self.speedx
                self.y += self.speedy
        if self.randomint == 3:
                self.x += self.speedx
                self.y += self.speedy
        if self.x == 0 or self.x == 768:
            self.speedx = -self.speedx
        if self.y == 0 or self.y == 568:
            self.speedy = -self.speedy

def drawGame():
    screen.fill((255,255,255))
    robot.draw(screen)
    for bullet in robot.bullets:
        bullet.drawBullet()
    for enemy in enemies:
        enemy.draw(screen)
    pygame.time.delay(30)
    pygame.display.update()

robot = Player(400, 300)
enemies = []

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


    enemy = Enemy(400, 200)

    enemies.append(enemy)
    for enemy in enemies:
        enemy.move()

    userInput = pygame.key.get_pressed()
    robot.shoot()
    robot.movePlayer(userInput)

    drawGame()

我认为这部分代码可能有助于确定我的问题。运行此代码会在指定的 x 和 y 值处无限生成敌人。由于我只调用了 Enemy 类的一个实例,我认为只有一个敌人会以随机的移动方向生成。为什么会发生这种情况?谢谢

标签: pythonpygame

解决方案


您的问题似乎是由在您拥有的“运行时:”循环中调用敌人类引起的,这意味着对于该游戏循环的每次迭代,它都会无休止地生成敌人。调用敌人类并将其附加到该循环之外的列表中应该可以解决问题

robot = Player(400, 300)
enemy = Enemy(400, 200)
enemies = []
enemies.append(enemy)

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


    
    for enemy in enemies:
        enemy.move()

    userInput = pygame.key.get_pressed()
    robot.shoot()
    robot.movePlayer(userInput)

    drawGame()

推荐阅读