在检测多个碰撞时需要一些帮助

时间:2019-05-27 06:02:39

标签: python

我创建了一个简单的程序,该程序由弹力球组成,这些弹力球从墙壁上弹起,并应该在与另一个球碰撞时变绿。但是,当我在屏幕上添加两个以上的球时,碰撞检测就会破裂:一些相互碰撞的球不会变绿,或者确实发生碰撞的球中只有一个变为绿色。如果有人可以查看我的代码并告诉我问题出在哪里,则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)

我们将不胜感激

0 个答案:

没有答案