Python抛射体程序报错:unsupported operand type(s) for //: 'function' and 'int'
解决Python/Pygame中
unsupported operand type(s) for //: 'function' and 'int'错误 错误原因分析
这个错误的核心是:你在对函数对象和整数执行整数除法(//)操作。从你提供的代码来看,问题出在man.width或man.height中的一个(或两个)——它们被定义成了类的方法(函数),而非实例属性,但你在代码里直接把它们当作整数属性来调用了。
举个例子,如果man所属类的定义是这样的:
class Player: def width(self): return 60 def height(self): return 80
那man.width就是一个函数对象,不是整数,和2做//运算自然会触发错误。
另外你的代码存在缩进逻辑bug:if len(fireBalls) <5:的缩进层级错误,它目前属于else块内部,导致只有角色朝右时才会检查火球数量,不符合发射逻辑,需要修正。
修复步骤
修正属性/方法调用方式
找到man所属类的定义:- 如果
width和height是实例属性(在__init__里初始化,比如self.width = 60),确认没有误将它们写成方法; - 如果它们是动态计算尺寸的方法,那在代码里要加括号调用,获取返回的整数值:
fireBalls.append(Projectile( round(man.x + man.width() // 2), round(man.y + man.height() // 2), 6, (0,0,0), facing ))
- 如果
调整代码缩进
将if len(fireBalls) <5:的缩进层级调整到和facing=1同级,确保无论角色朝左还是朝右,只要按下空格且火球数量少于5就发射:if keys[pygame.K_SPACE]: if man.Left: facing = -1 else: facing = 1 # 修正缩进,让判断逻辑独立于方向分支 if len(fireBalls) < 5: fireBalls.append(Projectile( round(man.x + man.width // 2), # 或 man.width() //2,根据实际定义调整 round(man.y + man.height // 2), # 同理调整此处 6, (0,0,0), facing ))
内容的提问来源于stack exchange,提问作者General Schorch
相关产品推荐
相关产品推荐

