【问题标题】:Problem with enemy movement towards player in pygame librarypygame库中敌人向玩家移动的问题
【发布时间】:2023-02-08 01:42:14
【问题描述】:

我在构建我的应用程序时遇到了 pygame 库的问题。

我的部分代码如下:在类的开头在里面方法 我创造了我的敌人。

self.create_enemy

然后,那个方法是这样的

def create_enemy(self):
         self.available_space_x = 10

         for enemy_number in range(self.sets.enemy_number):
             self.enemy = Enemy(self)
             self.available_space_x += 150
             self.enemy.x = self.available_space_x
             self.enemy.rect.x = self.enemy.x
             self.enemys.add(self.enemy)

这个方法的作用是在不同的地方创建了5个敌人,然后把它加入到我的敌人组中。

接下来,部分主要方法如下:

self.enemys.draw(self.screen)
self.checkenemymove()
self.update_enemys()

也就是说,它创建了我的敌人,然后执行这个函数:

     def checkenemymove(self):
         if self.human.human_rect.x >= self.enemy.rect.x:
             self.goenemleft = False
             self.goenemright = True
         elif self.human.human_rect.x < self.enemy.rect.x:
             self.goenemright = False
             self.goenemleft = True

如果玩家在敌人前面(玩家一侧),此方法会使敌人向右移动,或者如果玩家在敌人后面,则敌人会向左移动。

最后这个方法被执行:

def update_enemys(self):
         if self.goenemright:
             self.enemy.image = self.enemy.enemy_images[0]
             self.enemy.x += self.sets.enemy_speed
             self.enemy.rect.x = self.enemy.x
         if self.goenemleft:
             self.enemy.image = self.enemy.enemy_images[1]
             self.enemy.x -= self.sets.enemy_speed
             self.enemy.rect.x = self.enemy.x

问题是,如果我运行程序,只有最后一个敌人会这样做,而且玩家走到哪里,敌人也会朝那个方向移动。

请帮助我,谢谢。

我想让敌人朝我走来,但只有一个敌人朝我走来。

【问题讨论】:

    标签: python-3.x pygame


    【解决方案1】:

    从类中删除 self.enemy 属性。您不需要它,因为所有敌人都包含在 self.enemys pygame.sprite.Group 中。因此,您只需要一群敌人:

    def create_enemy(self):
             
             available_space_x = 10
             for enemy_number in range(self.sets.enemy_number):
                 enemy = Enemy(self)
                 available_space_x += 150
                 enemy.x = available_space_x
                 enemy.rect.x = enemy.x
                 self.enemys.add(self.enemy)
    

    使用for循环移动self.enemys列表中的所有敌人:

    def update_enemys(self):
    
        for enemy in self.enemys:
             if self.goenemright:
                 enemy.image = self.enemy.enemy_images[0]
                 enemy.x += self.sets.enemy_speed
                 enemy.rect.x = enemy.x
             if self.goenemleft:
                 enemy.image = self.enemy.enemy_images[1]
                 enemy.x -= self.sets.enemy_speed
                 enemy.rect.x = enemy.x
    

    【讨论】:

    • 这条线有问题。 self.enemys.add(self.enemy) AttributeError: 'Fighter' 对象没有属性 'enemy'。您是说:“敌人”吗?
    猜你喜欢
    • 2020-05-11
    • 1970-01-01
    • 2015-02-16
    • 1970-01-01
    • 2016-07-13
    • 2020-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多