Когда программа запускается, я получаю эту ошибку:
Traceback (most recent call last):
File "G:/assets/gametest1.py", line 141, in <module>
cam = camera(318,0,220)
File "G:/gametest1.py", line 85, in __init__
super(camera,self).__init__(playerposX,characterPosX,y)
NameError: name 'characterPosX' is not defined
Класс проигрывателя
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, playerposX, y):
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, y):
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, win):
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 camera(player):
def __init__(self, stagePosX,playerposX,y):
super(camera,self).__init__(playerposX,characterPosX,y)
self.playerposX = playerposX
self.startscrolling = bgWidth / 2
self.stagePosX = stagePosX
self.rel_x = 0
def scroll(self,stagePosX):
if self.k[pygame.K_LEFT]:
self.vel = (self.vel*-1)
elif self.k[pygame.K_RIGHT]:
self.vel = (self.vel*1)
else:
self.vel = 0
self.rel_x = self.stagePosX % bgWidth
if self.playerPosX > stageWidth - self.width:
self.playerPosX = self.stageWidth - self.width # If the player position exceeds the stage
if self.playerposX < 0 - self.width:
self.playerposX = self.width # If the player position is far left
if self.playerposX < self.startscrolling:
self.characterPosX = self.playerposX
elif self.playerposXplayerposX > stageWidth - self.startscrolling:
self.characterPosX = self.playerPosX - stageWidth + self.width
else:
self.characterPosX = self.startscrolling
self.stagePosX += -self.vel
def draw(self, win):
win.blit(bg, (self.rel_x - bgWidth, 0))
if self.rel_x < bgWidth:
win.blit(bg, (self.rel_x, 0))