2014-01-20 2 views
0

В игре, которую я делаю, я пытаюсь заставить врагов в том же списке не сталкиваться друг с другом. Код, который я использовал, чтобы попытаться получить эту работу здесь:PyGame: Два спрайта в одном списке Collide

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

Смежные вопросы