SpriteCollide ne s'exécute qu'une fois par collision
Je vérifie missileGroup
si des instances de sont missile
entrées en collision avec des instances enemy
dans enemyGroup
. Lorsqu'il est exécuté, il imprime "Hit" pour la première boucle, mais il ignore la deuxième boucle for. Pourquoi donc?
#### Imagine this is in a game loop ####
for missile in missileGroup:
if pygame.sprite.spritecollide(missile, enemyGroup, False) :
print("Hit")
for enemy in enemyGroup:
if pygame.sprite.spritecollide(enemy, missileGroup, False) == True:
print("HI")
Réponses
pygame.sprite.spritecollide()ne renvoie pas True
ou False
, mais renvoie une liste contenant tous les Sprites d'un Groupe qui se croisent avec un autre Sprite . Vous devez évaluer si la liste n'est pas vide au lieu de comparer le résultat avec True
:
if pygame.sprite.spritecollide(enemy, missileGroup, False) == True:
if pygame.sprite.spritecollide(enemy, missileGroup, False):
Quoi qu'il en soit, utilisez pygame.sprite.groupcollide()pour trouver tous les sprites qui entrent en collision entre deux groupes.
if pygame.sprite.groupcollide(missileGroup, enemyGroup, False, False):
print("Hit")
Voir pygame.sprite.spritecollide():
Renvoie une liste contenant tous les Sprites d'un groupe qui se croisent avec un autre Sprite.
Voir pygame.sprite.groupcollide()
Cela trouvera des collisions entre tous les Sprites dans deux groupes.
Par conséquent, les arguments spritecollide()
doivent être un pygame.sprite.Spriteobjet et un pygame.sprite.Groupobjet. les arguments groupcollide()
doivent être deux pygame.sprite.Group
objets.
Une liste d' pygame.sprite.Sprite
objets au lieu du groupe ne fonctionne pas.
missileGroup = pygame.sprite.Group()
enemyGroup = pygame.sprite.Group()
En outre, lisez sur kill()
Le Sprite est supprimé de tous les groupes qui le contiennent.
Par conséquent, si vous appelez kill()
la 1ère boucle, la 2ème boucle ne fonctionnera pas, car le sprite est supprimé de tous les groupes.
Vous appelez kill()
les reset
méthodes. provoque missile.reset()
respectivement eachEnemy.reset()
l'échec de la 2ème boucle.