我创建了一个简单的程序,该程序由弹力球组成,这些弹力球从墙壁上弹起,并应该在与另一个球碰撞时变绿。但是,当我在屏幕上添加两个以上的球时,碰撞检测就会破裂:一些相互碰撞的球不会变绿,或者确实发生碰撞的球中只有一个变为绿色。如果有人可以查看我的代码并告诉我问题出在哪里,则id会感激
我用Ball类的更新方法检测球之间的碰撞。
这是Ball类
class Ball:
def __init__(self,x,y,radius,speed,color=RED):
self.x=x
self.y=y
self.color=color
self.speed=speed
self.radius=radius
def update(self):
for i in range(0,len(ball)):
for j in range(0,len(ball)):
if i==j:
continue
elif is_collision(ball[i],ball[j]):
ball[i].color=GREEN
ball[j].color=GREEN
else:
ball[i].color=RED
ball[j].color=RED
def draw(self):
pygame.draw.circle(screen,self.color(self.x,self.y),radius)
这是该类之外的其余代码
def is_collision(ball1, ball2):
distance = math.hypot(ball2.x - ball1.x, ball2.y - ball1.y)
if distance<=ball1.radius+ball2.radius:
return True
else:
return False
for i in range(number_balls): # adds balls to list
rX=random.randint(radius,WIDTH-radius)
rY=random.randint(radius,HEIGHT-radius)
dx=random.randint(1,10)
dy=random.randint(1,10)
rC1=random.randint(0,255)
rC2=random.randint(0,255)
rC3=random.randint(0,255)
rColor=(rC1,rC2,rC3)
ball.append(Ball(rX,rY,25,[dx,dy]))
while True: # main loop
for events in pygame.event.get():
if events.type==pygame.QUIT:
sys.exit()
for x in ball:
x.x+=x.speed[0]
x.y+=x.speed[1]
if x.x-x.radius<0 or x.x+x.radius>WIDTH:
x.speed[0]=-x.speed[0]
if x.y-x.radius<0 or x.y+x.radius>HEIGHT:
x.speed[1]=-x.speed[1]
x.draw()
x.update()
pygame.display.update()
screen.fill(BLACK)
我们将不胜感激