在一個遊戲中,我正在嘗試讓同一個列表中的敵人不會相互碰撞。我曾經嘗試過的代碼在這裏:PyGame:在同一個列表中的兩個Sprites碰撞
for m in self.meteors:
if pygame.sprite.collide_rect(m, m):
self.velX = 0
else:
self.velY = 0
我不知道爲什麼這樣不起作用。它詢問兩顆流星是否碰撞,並在那裏停止X速度或Y速度。任何幫助將不勝感激,謝謝。
在一個遊戲中,我正在嘗試讓同一個列表中的敵人不會相互碰撞。我曾經嘗試過的代碼在這裏:PyGame:在同一個列表中的兩個Sprites碰撞
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
謝謝你這個答案,我會看看它是否修復我的問題。再次感謝 – GhostFrag1
但我只是讀了頂部。我正在使用超過1顆流星。我不會爲每一顆流星都這麼做嗎? – GhostFrag1
第一個循環遍歷你的流星,第二個循環再次通過它們,檢查以確保你沒有檢查相同的流星本身,然後檢查碰撞。剩下的就是你的代碼。 – pathunstrom
您確定要將'm'傳遞給碰撞函數兩次嗎?他們中的一個應該是「自我」嗎? – mhlester
它在做什麼,是檢查同一個流星是否佔據相同的空間,如果是的話,它將velX設置爲0.由於同一個對象將自身碰撞,所以它永遠不會到達velY。你能詳細說明你在做什麼嗎? –
我試圖阻止流星與海誓山盟碰撞,但繼續向另一個方向移動,所以如果它與流星的頂部/底部發生碰撞,它將只移動相反的方向或移動X速度。 – GhostFrag1