Pygame游戏开发报错:TypeError: player() takes no arguments如何解决?
嘿,我马上就发现你报错的核心问题啦!
直接导致报错的原因:构造函数写法错误
你定义player类的时候,把构造函数写成了__init_(最后只有一个下划线),但Python规定类的构造函数必须是__init__(开头和结尾各两个下划线)。
因为这个拼写错误,Python没有识别到你自定义的带参构造函数,就会使用默认的无参构造函数。所以当你执行man = player(300, 410, 64, 64)传参时,就会抛出TypeError: player() takes no arguments的错误。
修正后的player类:
class player(object): def __init__(self, x, y, width, height): # 这里改成__init__,两个下划线结尾 self.x = x self.y = y self.width = width self.height = height self.vel = 5 self.isjump = False self.jumpCount = 10 self.left = False self.right = False self.walkCount = 0
其他会导致运行异常的问题
解决了上面的报错后,你的代码还有几个小问题需要调整,不然运行后还是会出错:
1. 绘制函数中引用未定义的全局变量
redrawGameWindow里直接用了left、right、x、y,但这些都是man对象的属性,要改成引用man的属性:
def redrawGameWindow(): global walkCount win.blit(bg, (0,0)) if walkCount + 1 >= 27: walkCount = 0 if man.left: win.blit(walkLeft[walkCount//3], (int(man.x),int(man.y))) walkCount += 1 elif man.right: win.blit(walkRight[walkCount//3], (int(man.x),int(man.y))) walkCount += 1 else: win.blit(char, (int(man.x), int(man.y))) walkCount = 0 pygame.display.update()
2. 键盘控制逻辑中的变量引用错误
- 把
x > man.vel改成man.x > man.vel - 把
man.x += vel改成man.x += man.vel
3. 属性名大小写不一致
类里定义的是self.isjump = False(小写j),但后面的判断写成了if not(man.isJump):(大写J),要统一改成if not(man.isjump):,否则跳跃功能会失效。
把这些都修正后,你的Pygame游戏应该就能正常运行啦!
内容的提问来源于stack exchange,提问作者Bruce Banner
相关产品推荐
相关产品推荐

