python - 继承中的 nameError
问题描述
程序运行时出现此错误:
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))
解决方案
我在这里冒险猜测,但第二次调用__init__()
正在传递尚不存在的参数。
def __init__(self, stagePosX,playerposX,y):
super(camera,self).__init__(playerposX,characterPosX,y)
应该是这样的:
def __init__( self, stagePosX, playerposX, y):
super( camera, self ).__init__( playerposX, stagePosX, y ) # NOT characterPosX
也许您需要为此发送不同或额外的参数?从问题的代码中很难知道。
推荐阅读
- java - 日期格式在 java 代码中返回 ORA-00904 但在 sql developer 中不返回
- ios - 如何判断 CollectionViewCell 是否位于屏幕中心
- android - AsyncTask 使用 json 从 php 获取数据
- php - 如何缓存 Laravel 数据库连接的 DNS 查找?
- c++ - RegQueryValueEx 每次返回不同的值
- ios - Xcode 10 词法或预处理器问题.h 文件未找到
- php - 如何使用 PHP 接收邮件
- c++ - 程序错误地读取二进制文件的字节之一
- azure - Login-AzureRmAccount 在 Microsoft Azure Government 中不起作用
- html - 获取返回未定义的请求