You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 15:42:47