我正在制作一个游戏,我有一个大炮可以从空中发射球,所以我创建了一个名为 ball 的类和一个名为 balls 的列表,其中(显然)包含球。每个球都有一个值,每次被射弹击中时,它的值都会减一,所以如果 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̶.̶
该ball(x, y)
命令应该创建ball
该类的一个实例。但是这个词ball
已经用于 的元素balls
。所以,只要让你的循环for b in balls
。为类和类的实例使用相同的名称是一个非常非常糟糕的主意。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句