删除的精灵似乎仍然存在 - cocos2D

时间:2013-08-19 10:34:24

标签: objective-c cocos2d-iphone

我正在与cocos2D进行一场小游戏,您可以使用加速度计操纵船只,并通过点击屏幕拍摄东西。你击落的东西由CCMoveTo控制,它将它们从屏幕顶部向下移动到0以下。如果船与其中一个飞行物发生碰撞,它们就会停止产生,所有其他时间表都会暂停。出现“暂停屏幕”。

代码:

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];

}

飞行物体在相同的y值上每1秒在x轴上随机生成。


我的问题是,当_ship与飞行物体发生碰撞时,菜单会弹出resumeButton,如果我点击resumeButton,它会删除它应该但只有1/100第二,然后再次加载菜单。

这意味着CGRectIntersecsRect()检测到碰撞,即使我有removeAndCleandUp之前应删除然后再点击resumeButton它们应该开始在顶部产卵,而不是隐形左侧并与船发生碰撞。造成这种情况的原因是什么?

对于一个不好的问题抱歉,请询问是否不清楚。提前谢谢!

1 个答案:

答案 0 :(得分:3)

在您枚举removeFromParentAndCleanUp:集合时,

children会从其父级_flyingObjects数组中删除节点。你也必须从_flyingObjects删除你的精灵。

请记住,在枚举时不得改变集合,因此存储必须在临时集合中删除的对象,并在完成枚举后从_flyingObjects中删除此集合中的对象。