0

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

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 以便当两个精灵第一次碰撞时,会检测到碰撞,但之后的任何时候都不会。

提前致谢。

4

2 回答 2

0

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

你会试试这个吗?

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

您是否尝试过添加一些 NSLog 跟踪来查看精灵是否真的被移除了?

于 2012-07-01T08:33:16.080 回答
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 回答