问题描述
我创建了 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()