충돌 당 한 번만 실행되는 SpriteCollide
나는 확인하고있어 missileGroup
의 인스턴스가 있는지 확인하기 위해 missile
모든 인스턴스와 충돌 enemy
에서 enemyGroup
. 실행되면 첫 번째 루프에 대해 "Hit"을 인쇄하지만 두 번째 for 루프는 무시합니다. 왜 그런 겁니까?
#### 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")
답변
pygame.sprite.spritecollide()True
또는을 반환하지 않지만 다른 Sprite 와 교차 하는 그룹의False
모든 Sprite 를 포함하는 목록을 반환합니다 . 결과를 다음 과 비교하는 대신 목록이 비어 있지 않은지 평가해야합니다 .True
if pygame.sprite.spritecollide(enemy, missileGroup, False) == True:
if pygame.sprite.spritecollide(enemy, missileGroup, False):
어쨌든 pygame.sprite.groupcollide()두 그룹 사이에 충돌하는 모든 스프라이트를 찾는 데 사용하십시오 .
if pygame.sprite.groupcollide(missileGroup, enemyGroup, False, False):
print("Hit")
참조 pygame.sprite.spritecollide():
다른 Sprite와 교차하는 그룹의 모든 Sprite를 포함하는 목록을 반환합니다.
보다 pygame.sprite.groupcollide()
이렇게하면 두 그룹의 모든 스프라이트간에 충돌이 발생합니다.
따라서 인수 spritecollide()
는 pygame.sprite.Sprite객체와 객체 여야 pygame.sprite.Group합니다. 인수 groupcollide()
는 두 개의 pygame.sprite.Group
객체 여야 합니다. 그룹 대신 개체
목록이 작동하지 않습니다.pygame.sprite.Sprite
missileGroup = pygame.sprite.Group()
enemyGroup = pygame.sprite.Group()
더 읽어보기 kill()
스프라이트가 포함 된 모든 그룹 에서 제거됩니다 .
따라서 kill()
첫 번째 루프 를 호출 하면 스프라이트가 모든 그룹 에서 제거되기 때문에 두 번째 루프가 작동하지 않습니다 .
당신은 전화 kill()
에 reset
방법. missile.reset()
각각 eachEnemy.reset()
두 번째 루프가 실패합니다.