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

问题描述

我创建了 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()