删除子后,boundingBox仍然存在

时间:2012-07-01 08:11:38

标签: ios cocos2d-iphone collision-detection ccsprite bounding-box

我实例化了一个精灵,然后当它与第二个精灵发生碰撞时,该精灵的孩子被删除了:

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 个答案:

答案 0 :(得分:0)

据我了解,碰撞后删除精灵应该有一些问题。

你会试试吗?

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

您是否尝试添加一些NSLog跟踪以查看是否真的删除了精灵?

答案 1 :(得分: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
     }
}