Python PyGame:同一列表中的两个精灵碰撞
在我制作的游戏中,我试图让同一列表中的敌人不相互碰撞。我尝试使用的代码如下:Python PyGame:同一列表中的两个精灵碰撞,python,python-2.7,python-3.x,pygame,Python,Python 2.7,Python 3.x,Pygame,在我制作的游戏中,我试图让同一列表中的敌人不相互碰撞。我尝试使用的代码如下: for m in self.meteors: if pygame.sprite.collide_rect(m, m): self.velX = 0 else: self.velY = 0 我不知道为什么这样不行。它询问两颗流星是否发生碰撞,并以X速度或Y速度停在那里。感谢您的帮助。您不应该使用双环路吗 for index1, meteor1 in enumerate(s
for m in self.meteors:
if pygame.sprite.collide_rect(m, m):
self.velX = 0
else:
self.velY = 0
我不知道为什么这样不行。它询问两颗流星是否发生碰撞,并以X速度或Y速度停在那里。感谢您的帮助。您不应该使用双环路吗
for index1, meteor1 in enumerate(self.meteors):
for index2, meteor2 in enumerate(self.meteors):
if index1 != index2:
if pygame.sprite.collide_rect(meteor1, meteor2):
self.velX = 0
else:
self.velY = 0
是否确实要将
m
传递给碰撞功能两次?它们中的一个是否应该是self?它所做的是检查同一颗流星是否占据同一空间,如果是,它将其velX设置为0。由于同一个对象将与其自身发生碰撞,因此这将永远无法到达目标。你能详细说明你想做什么吗?我试图阻止流星相互碰撞,但继续朝着另一个方向移动,所以如果它与流星的顶部/底部碰撞,它只会朝相反的方向移动,或者以X速度移动。如果我这样做,我会得到一个关于rect的错误,所以我认为它一定是(m,m)谢谢你的回答,我会看看它是否解决了我的问题。再次感谢,但我只是读了上面的内容。我使用的流星不止一颗。那么,我不是必须对每一颗流星都这样做吗?第一个循环遍历你的流星,第二个循环再次遍历它们,检查以确保你没有检查同一颗流星的自身,然后检查碰撞。剩下的是你的密码。好的,谢谢你帮我清理。我现在试试看。