При попытке перейти на OOP в моем платформере я столкнулся с этой ошибкой при попытке реализовать наследование в программе.
Traceback (most recent call last):
File "G:\Coursework assets\Gametest2.py", line 115, in <module>
bullet.shoot()
File "G:\Coursework assets\Gametest2.py", line 88, in shoot
if self.left:
AttributeError: 'projectile' object has no attribute 'left'
Вот родительский класс для игрока, который является главным персонажем пользователь контролирует
class player:
def __init__(self, playerposX,characterPosX,y):
self.playerposX = playerposX
self.y = y
self.width = 88
self.height = 135
self.standing = True
self.left = False
self.right = True
self.vel = 15
self.jumping = False
self.jumpCount = 10
self.attacking = False
self.characterPosX = characterPosX
def move(self):
self.k = pygame.key.get_pressed()
if self.k[pygame.K_LEFT] and self.playerposX > 0 - 45:
self.left = True
self.right = False
self.playerposX -= self.vel
self.standing = False
elif self.k[pygame.K_RIGHT] and self.playerposX < 1500 - 90:
self.right = True
self.left = False
self.standing = False
self.playerposX += self.vel
else:
self.standing = True
def jump(self):
if not (self.jumping): # checks if user's jumping intiating jump
if self.k[pygame.K_SPACE]:
self.jumping = True
else:
if self.jumpCount >= -10:
neg = 1
if self.jumpCount < 0:
neg = -1
self.y -= (self.jumpCount ** 2) * 0.5 * neg
self.jumpCount -= 1
else:
self.jumping = False
self.jumpCount = 10
def draw(self):
wLeft = pygame.image.load('runningleft.png')
wRight = pygame.image.load('running.png')
char = [pygame.image.load('idleright.png'), pygame.image.load('idleleft.png')]
attack = [pygame.image.load('attackleft.png'), pygame.image.load('attackright.png')]
if not (self.standing):
if self.left:
win.blit(wLeft, (self.playerposX, self.y))
elif self.right:
win.blit(wRight, (self.playerposX, self.y))
else:
if self.right:
win.blit(char[0], (self.playerposX, self.y))
if self.left:
win.blit(char[1], (self.playerposX, self.y))
if self.attacking == True:
if self.left:
win.blit(attack[0], (self.playerposX, self.y))
if self.right:
win.blit(attack[1], (self.playerposX, self.y))
Вот дочерний класс, в котором, похоже, возникает ошибка
class projectile(player):
def __init__(self,bulletx, bullety):
self.bulletx = bulletx
self.bullety = bullety
self.facing = 1
self.shooting = False
def shoot(self):
self.vel = 30 * self.facing
if self.left:
self.facing = -1
else:
self.facing = 1
self.bulletx += self.vel
if self < 0 or bullet.x > 500:
self.shooting = True
def draw(self):
if self.shooting == True:
win.blit(thunderball,(self.bulletx,self.bullety))
Я не уверен, как исправить это, поэтому я прихожу сюда, чтобы получить совет о том, как решить это