我正在做一个游戏,其中我拥有一门能发射空中球的加农炮,因此我创建了一个名为ball的类和一个名为balls的列表(显然)包含balls。每个球都有一个值,每次被弹丸击中时,其值都会递减1,因此,如果ball.value减小为1,则当击中该球时,该球将从列表中删除,并且另一个球必须进入。这是该代码:
for projectile in projectiles:
for ball in balls:
if hypot(ball.rec.center[0]-projectile.center[0],ball.rec.center[1]-projectile.center[1] ) < ball.radius:
if ball.value == 1:
balls.remove(ball)
balls.append(ball((randint(1,SCREENWIDTH - 100),10),2,0))
else:
ball.shrink()
projectiles.remove(projectile)
break
当我这样做时,球死了的那一刻,我会收到一条消息:
TypeError: 'ball' object is not callable
但是当我在球列表初始化之后放置balls.append(ball((randint(1,SCREENWIDTH - 100),10),2,0))
时,我没有出现任何错误,但是另一个球刚出现在屏幕上。
我试图改变环路与̶̶f̶o̶r̶ ̶b̶a̶l̶l̶o̶o̶n̶ ̶i̶n̶ ̶b̶a̶l̶l̶s̶
̶以查看是否̶t̶h̶a̶t̶'̶s̶这个问题,但没有改善,̶相同̶p̶r̶o̶b̶l̶e̶m̶.̶
答案 0 :(得分:0)
应该使用ball(x, y)
命令创建ball
类的实例。但是单词ball
已经用于balls
的元素。所以,让你循环
for b in balls
。为类和类的实例使用相同的名称确实是一个非常糟糕的主意。