2014-01-20 22 views
0

在一個遊戲中,我正在嘗試讓同一個列表中的敵人不會相互碰撞。我曾經嘗試過的代碼在這裏:PyGame:在同一個列表中的兩個Sprites碰撞

for m in self.meteors: 
    if pygame.sprite.collide_rect(m, m): 
     self.velX = 0 
    else: 
     self.velY = 0 

我不知道爲什麼這樣不起作用。它詢問兩顆流星是否碰撞,並在那裏停止X速度或Y速度。任何幫助將不勝感激,謝謝。

+1

您確定要將'm'傳遞給碰撞函數兩次嗎?他們中的一個應該是「自我」嗎? – mhlester

+1

它在做什麼,是檢查同一個流星是否佔據相同的空間,如果是的話,它將velX設置爲0.由於同一個對象將自身碰撞,所以它永遠不會到達velY。你能詳細說明你在做什麼嗎? –

+0

我試圖阻止流星與海誓山盟碰撞,但繼續向另一個方向移動,所以如果它與流星的頂部/底部發生碰撞,它將只移動相反的方向或移動X速度。 – GhostFrag1

回答

0

你不應該使用雙循環?

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 
+0

謝謝你這個答案,我會看看它是否修復我的問題。再次感謝 – GhostFrag1

+0

但我只是讀了頂部。我正在使用超過1顆流星。我不會爲每一顆流星都這麼做嗎? – GhostFrag1

+0

第一個循環遍歷你的流星,第二個循環再次通過它們,檢查以確保你沒有檢查相同的流星本身,然後檢查碰撞。剩下的就是你的代碼。 – pathunstrom