微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

来自玩家类的变量在敌人类中不起作用

如何解决来自玩家类的变量在敌人类中不起作用

我创建了 2 个类:1 个 Player 类和 1 个 Enemy 类。我希望敌人跟随玩家。 为此,我需要从 Player 类中获取当前玩家位置,并在 Enemy 类中使​​用它。 但这不是workink,我不知道该怎么办

这是现在的代码

class Player():
    
    def __init__(self,xPlayer,yPlayer):
        self.xPlayer = xPlayer
        self.yPlayer = yPlayer
    
    def display(self):
        playerRect = pygame.Rect(self.xPlayer,self.yPlayer,25,25)
        pygame.draw.rect(screen,(255,255),playerRect)

    def move(self):
        keys = pygame.key.get_pressed()
        if keys[pygame.K_RIGHT]:
            self.xPlayer = self.xPlayer + velPlayer
        if keys[pygame.K_LEFT]:
            self.xPlayer = self.xPlayer - velPlayer
        if keys[pygame.K_DOWN]:
            self.yPlayer = self.yPlayer + velPlayer
        if keys[pygame.K_UP]:
            self.yPlayer = self.yPlayer - velPlayer

player1 = Player(100,100)
#------------------------------------------------------------------------
class Enemy(Player):
    def __init__(self,xEnemy,yEnemy):
        self.xEnemy = xEnemy
        self.yEnemy = yEnemy
    
    def display(self):
        enemyRect = pygame.Rect(self.xEnemy,self.yEnemy,0),enemyRect)
    
    def move(self):
        if xPlayer < xEnemy:
            xEnemy = xEnemy - velEnemy
        if xPlayer > xEnemy:
            xEnemy = xEnemy + velEnemy
        if yPlayer < yEnemy:
            yEnemy = yEnemy + velEnemy
        if yPlayer > yEnemy:
            yEnemy = yEnemy - velEnemy

enemy1 = Enemy(200,200)
#--------------------------------------------------------------------------


running = True

while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    
    
    ecranAlb()
    player1.move()
    player1.display()
    enemy1.move()
    enemy1.display()
    pygame.display.flip()
    

    

解决方法

Enemy 不得从 Player 类派生。将 Player 类的实例传递给 move 类的 Enemy 方法:

class Enemy(Player):
    def __init__(self,xEnemy,yEnemy):
        self.xEnemy = xEnemy
        self.yEnemy = yEnemy
    
    def display(self):
        enemyRect = pygame.Rect(self.xEnemy,self.yEnemy,25,25)
        pygame.draw.rect(screen,(255,0),enemyRect)
    
    def move(self,player):
        if player.xPlayer < self.xEnemy:
            self.xEnemy -= velEnemy
        if player.xPlayer > self.xEnemy:
            self.xEnemy += velEnemy
        if player.yPlayer < self.yEnemy:
            self.yEnemy += velEnemy
        if player.yPlayer > self.yEnemy:
            self.yEnemy -= velEnemy
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    
    ecranAlb()
    player1.move()
    player1.display()
    enemy1.move(player1)  # <--- pass player1
    enemy1.display()
    pygame.display.flip()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。