【问题标题】:boundingBox still there after child is removed删除孩子后boundingBox仍然存在
【发布时间】:2012-07-02 02:07:36
【问题描述】:

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

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

提前致谢。

【问题讨论】:

  • “边界框还在那里”是如何表现出来的?你观察到什么错误?
  • 好吧,当两个精灵碰撞时,我调用了一个方法,该方法将 +1 加到分数上。发生的情况是,它们第一次发生碰撞时,分数会增加 +1,并且第一个精灵消失了。但是,只要第二个精灵悬停在第一个精灵“死亡”的位置上,就会添加额外的点。

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


【解决方案1】:

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

你会试试这个吗?

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

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

【讨论】:

    【解决方案2】:

    您必须保留 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
         }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-19
      • 1970-01-01
      • 2016-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-15
      • 2018-11-12
      相关资源
      最近更新 更多