2013-03-07 112 views
1

我目前正在教程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

回答

2

我看了看教程,和我確定了上述評論的一行:

[self removeChild:monster cleanup:YES]; 

嘗試。

+1

我通常更喜歡'[怪物removeFromParentAndCleanup:YES]',這樣,當你改變「怪物」的父親時,你的代碼不會中斷。 – Sebastian 2013-03-07 21:08:51

+1

原則上是真的......我剛剛從教程中直接複製了這一行,以便讓Sophia再次出發。但是因爲自己似乎是怪物的父母,在這種情況下並不是很大的區別。 – YvesLeBorg 2013-03-07 21:12:09

0

你正在做[self removeFromParentAndCleanup:YES],它會從父級移除當前圖層。所以你會得到一個黑屏。

您可能想要從圖層中移除子怪物。