这些似乎是稍大程序的相关部分。这些本质上是碰撞检测功能。 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正在以正确的顺序运行它们。只是不想让代码陷入困境。
答案 0 :(得分:1)
在迭代时,不应使用remove
修改列表。
要过滤掉碰撞气泡,请使用以下内容:
def check(balloon, bubbles, window):
bubbles[:] = [bubble for bubble in bubbles
if not baloonBubbleCollide(balloon, bubble)]
显示的代码将创建第一个要保留的气泡对象的新列表(使用列表推导),然后立即用它替换bubbles
列表的当前内容。