SpriteCollideは衝突ごとに1回だけ実行されます
私がチェックしてるmissileGroup
のインスタンスのいずれかがどうかを確認するためにmissile
すべてのインスタンスと衝突enemy
の中でenemyGroup
。実行すると、最初のループに対して「ヒット」が出力されますが、2番目の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
またはを返しませんFalse
が、別のスプライトと交差するグループ内のすべてのスプライトを含むリストを返します。結果を:と比較する代わりに、リストが空でないかどうかを評価する必要があります。True
if pygame.sprite.spritecollide(enemy, missileGroup, False) == True:
if pygame.sprite.spritecollide(enemy, missileGroup, False):
とにかくpygame.sprite.groupcollide()、2つのグループ間で衝突するすべてのスプライトを見つけるために使用します。
if pygame.sprite.groupcollide(missileGroup, enemyGroup, False, False):
print("Hit")
参照pygame.sprite.spritecollide():
別のスプライトと交差するグループ内のすべてのスプライトを含むリストを返します。
見る pygame.sprite.groupcollide()
これにより、2つのグループのすべてのスプライト間の衝突が検出されます。
したがって、への引数spritecollide()
はpygame.sprite.Spriteオブジェクトとオブジェクトでなければなりませんpygame.sprite.Group。の引数groupcollide()
は2つのpygame.sprite.Group
オブジェクトでなければなりません。グループの代わり
にpygame.sprite.Sprite
オブジェクトのリストが機能しません。
missileGroup = pygame.sprite.Group()
enemyGroup = pygame.sprite.Group()
さらに読む kill()
スプライトは、それを含むすべてのグループから削除されます。
したがってkill()
、1番目のループを呼び出すと、スプライトがすべてのグループから削除されるため、2番目のループは機能しません。
あなたは呼んkill()
でreset
メソッド。missile.reset()
それぞれeachEnemy.reset()
、2番目のループが失敗します。