2013-08-19 45 views
1

我正在用cocos2D做一個小遊戲,在那裏你可以用加速度計操縱一艘船,並通過點擊屏幕擊落事情。你擊落的東西由CCMoveTo控制,CCMoveTo將它們從屏幕的頂部移動到0以下。如果船隻與其中一個飛行物相撞,它們將停止產卵並且所有其他時間表都會暫停。出現「暫停屏幕」。被刪除的精靈仍然似乎存在 - cocos2D

代碼:

for (CCSprite *sprite in _flyingObjects) 
{ 
    if (CGRectIntersectsRect(_ship.boundingBox, _sprite.boundingBox)) 
    { 
     [sprite removeFromParentAndCleanUp:YES]; 
     [self pauseSchedulerAndActions]; 

     CCMenuItem *resumeMenuItem = [CCMenuItemImage itemWithNormalImage:@"resume.gif" selectedImage:@"resume.gif" target:self selector:@selector(resumeButtonTapped:)]; 
     resumeMenuItem.position = ccp(150, 190); 
    } 
} 

- (void)resumeButtonTapped:(id)sender 
{ 
    [self removeChild:resumeMenuItem]; 
    [self resumeSchedulerAndActions]; 

} 

的飛行物體是隨機生成的在x軸的相同y值每隔1秒。



我的問題是,當_ship與飛行物體碰撞時,屏幕上彈出菜單與resumeButton,如果我點擊resumeButton它刪除,因爲它應該,但只有一個1/100秒,然後選擇菜單再次加載。

這意味着CGRectIntersecsRect()檢測到碰撞,即使我有removeAndCleandUp它之前應該刪除,然後當點擊resumeButton,他們應該開始產卵在頂部,而不是左側看不見,並與船相撞。這是什麼造成的?

抱歉有一個錯誤的公式化問題,請問是否不清楚。提前致謝!

回答

3

removeFromParentAndCleanUp:從您父母的children數組中刪除節點,同時您正在枚舉_flyingObjects集合。你也必須從_flyingObjects中刪除你的精靈。

請記住,你不能在此集合,從_flyingObjects您完成後枚舉變異的集合,而枚舉它,所以它必須在臨時集中刪除存儲對象,以及刪除對象。

+0

實際上,當你通過[_flyingObjects reverseObjectEnumerator]向後枚舉時,你可以改變數組,並且只刪除當前對象或任何已經枚舉的對象。 – LearnCocos2D

+0

謝謝你它的工作! –