boundingBox sigue ahí después de que se elimine el niño

Hago una instancia de un sprite, y luego, cuando choca con un segundo sprite, se elimina el hijo de ese sprite:

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];
         }
}

Esto funciona como yo quiero, y el sprite desaparece de la pantalla. Sin embargo, parece que elboundingBox todavía está allí, incluso si la imagen no lo está, y esto causa problemas con la puntuación, etc. Entonces, lo que me gustaría saber es cómo 'desactivar' elboundingBox del sprite para que cuando la primera vez que los dos sprites chocan, se detecta la colisión, pero en cualquier momento después de eso, no es así.

Gracias de antemano.

preguntado el 01 de julio de 12 a las 09:07

¿Cómo se manifiesta "el cuadro delimitador todavía está allí"? que error estas observando -

bueno, cuando los dos sprites chocan, llamo a un método, que suma +1 a la puntuación. Lo que pasa es que la primera vez que chocan, se suma un +1 al marcador, y el primer sprite desaparece. Sin embargo, cada vez que el segundo sprite se desplaza sobre el lugar donde "murió" el primer sprite, se agregan puntos adicionales. -

2 Respuestas

Según tengo entendido, deberías tener algún problema para eliminar el sprite después de una colisión.

¿Intentarías esto?

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

¿Ha intentado agregar algunos rastros de NSLog para ver si el sprite realmente se eliminó?

Respondido 01 Jul 12, 09:07

Debes conservar spriteOne. Si hay una buena razón para mantenerlo, haga esto:

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;
     }
}

Más tarde, cuando necesite spriteOne en juego nuevamente, simplemente configure su visibilidad en SÍ;

Si no, tienes una fuga, y haz esto:

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
     }
}

Respondido 04 Jul 12, 11:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.