为什么这个圆圈在碰撞时不会消失?

时间:2014-10-25 20:16:56

标签: python graphics

这些似乎是稍大程序的相关部分。这些本质上是碰撞检测功能。 bubbles是圈子的原始列表。我希望碰撞的圆圈在撞击时消失。我很确定我的问题就在那里"如果碰撞=="有条件的。

def getDistance(point1,point2):
    a= point1.getX()
    b= point2.getX()
    c= point1.getY()
    d= point2.getY()
    distance=  math.sqrt((b-a)**2 + ((d-c)**2))
    return distance

def balloonBubbleCollide(balloon,bubble):
    point1 = balloon.getCenter()
    point2= bubble.getCenter()
    distance= getDistance(point1, point2)
    if distance <= 30:
        return True

def check(balloon, bubbles, window):
    for bubble in bubbles:
       collide = balloonBubbleCollide(balloon, bubble)
       if collide == True:
            bubbles.remove(bubble)

假设main正在以正确的顺序运行它们。只是不想让代码陷入困境。

1 个答案:

答案 0 :(得分:1)

在迭代时,不应使用remove修改列表。

要过滤掉碰撞气泡,请使用以下内容:

def check(balloon, bubbles, window):
    bubbles[:] = [bubble for bubble in bubbles
                  if not baloonBubbleCollide(balloon, bubble)]

显示的代码将创建第一个要保留的气泡对象的新列表(使用列表推导),然后立即用它替换bubbles列表的当前内容。