0

スプライトをインスタンス化し、それが2番目のスプライトと衝突すると、そのスプライトの子が削除されます。

if (CGRectIntersectsRect(spriteOne.boundingBox, self.swat.boundingBox)) 
     {
         if (spriteOne.tag == 0){
             [self removeChild:spriteOne cleanup:YES];
         }
         if (spriteOne.tag == 1){
             [self removeChild:spriteOne cleanup:YES];
         }
}

これは私が望むように機能し、スプライトは画面から消えます。ただし、画像がなくてもboundingBoxは残っているようで、スコアリングなどの問題が発生します。そこで、スプライトのboundingBoxを「非アクティブ化」する方法を知りたいのですが、 2つのスプライトが最初に衝突したときに衝突が検出されますが、それ以降は検出されません。

前もって感謝します。

4

2 に答える 2

0

spriteOne を保持している必要があります。保持する正当な理由がある場合は、次のようにします。

if ( spriteOne.visible && CGRectIntersectsRect(spriteOne.boundingBox, self.swat.boundingBox)) 
 {
     if (spriteOne.tag == 0){
         spriteOne.visible=NO;
     }
     if (spriteOne.visible && spriteOne.tag == 1){
         spriteOne.visible=NO;
     }
}

後で spriteOne が再び必要になった場合は、可視性を YES に設定してください。

そうでない場合は、リークがあり、次のようにします。

if ( spriteOne && CGRectIntersectsRect(spriteOne.boundingBox, self.swat.boundingBox)) 
 {
     if (spriteOne.tag == 0){
         [self removeChild:spriteOne cleanup:YES];
         self.spriteOne=nil;    // assumes you have a property for spriteOne
     }
     if (spriteOne && spriteOne.tag == 1){
         [self removeChild:spriteOne cleanup:YES];
         [spriteOne release];   // assumes no property for spriteOne
         spriteOne=nil;         // dont forget this ! beware of zombies
     }
}
于 2012-07-02T11:41:11.263 に答える