2013-08-19 47 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

谢谢你它的工作! –