Cocos2d:删除精灵时出现黑屏

问题描述:

我目前正在教程http://www.raywenderlich.com/25736/how-to-make-a-simple-iphone-game-with-cocos2d-2-x-tutorial。 当忍者之星击中怪物时,我会遇到一些问题。我的代码是:Cocos2d:删除精灵时出现黑屏

- (void)update:(ccTime)dt {  
    NSMutableArray *projectilesToDelete = [[NSMutableArray alloc] init]; 
    for (CCSprite *projectile in _projectiles) { 

     NSMutableArray *monstersToDelete = [[NSMutableArray alloc] init]; 
     for (CCSprite *monster in _monsters) { 
      if (CGRectIntersectsRect(projectile.boundingBox, monster.boundingBox)) { 
       [monstersToDelete addObject:monster]; 
      } 
     } 

     for (CCSprite *monster in monstersToDelete) { 
      [_monsters removeObject:monster]; 
      [self removeFromParentAndCleanup:YES]; 
     } 

     if (monstersToDelete.count > 0) { 
      [projectilesToDelete addObject:projectile]; 
     } 
     [monstersToDelete release]; 
    } 

    for (CCSprite *projectile in projectilesToDelete) { 
     [_projectiles removeObject:projectile]; 
     [self removeChild:projectile cleanup:YES]; 
    } 
    [projectilesToDelete release]; 

} 

这工作好,不会崩溃,但是当我打一个怪物有弹,屏幕变黑的模拟器。没有错误或任何东西。我记录了CGRectIntersectRect,并且它按照它应该记录的那样记录。问题是,当这种情况发生时,它全部变黑。任何想法为什么?

+0

[self removeFromParentAndCleanup:YES];在这方面什么是自我?也许只是可能 – YvesLeBorg 2013-03-07 20:37:57

+0

@YvesLeBorg难道这不是怪物对象吗? – 2013-03-07 20:42:14

+0

不确定这里的对象模型是什么,可能是嵌入游戏控制器的层。不确定。这听起来很“腥”,运行一段逻辑的对象在做这项工作的时候会自行删除。也许OP在主循环之后需要另一个循环来遍历怪物来删除和删除它们。 – YvesLeBorg 2013-03-07 20:44:55

我看了看教程,和我确定了上述评论的一行:

[self removeChild:monster cleanup:YES]; 

尝试。

+1

我通常更喜欢'[怪物removeFromParentAndCleanup:YES]',这样,当你改变“怪物”的父亲时,你的代码不会中断。 – Sebastian 2013-03-07 21:08:51

+1

原则上是真的......我刚刚从教程中直接复制了这一行,以便让Sophia再次出发。但是因为自己似乎是怪物的父母,在这种情况下并不是很大的区别。 – YvesLeBorg 2013-03-07 21:12:09

你正在做[self removeFromParentAndCleanup:YES],它会从父级移除当前图层。所以你会得到一个黑屏。

您可能想要从图层中移除子怪物。