如何删除子层cocos2d

时间:2013-11-29 18:43:39

标签: ios objective-c cocos2d-iphone

删除子图层时遇到小问题。我不确定如何正确删除图层。

这是我的代码示例

-(void)GoMoveFirst
{
    //
    //====HERE IS COMBOBOX START

    CCMenuItemImage *lvl1 = newButton(@"retry1", 200, 590, self, @selector(onRetry));
    CCMenuItemImage *lvl2 = newButton(@"retry1", 500, 590, self, @selector(onRetry)); //onHighScore:
    CCMenuItemImage *lvl3 = newButton(@"retry1", 800, 590, self, @selector(onRetry));
    CCMenu *menu = [CCMenu menuWithItems:lvl1, lvl2,lvl3, nil];
    menu.position = ccp(0, 0);
    [GameLayer addChild:menu z:103];
}

按下其中一个按钮后,我需要将其删除。 所有的东西都在这里:

-(void)onRetry
{
    //
//HERE i need remove menu Child.
//

    [m_sGo runAction:[CCSequence actions:actionMove, [CCCallFunc actionWithTarget:self selector:@selector(GoMoveSecond)], nil]];
}

一个想法是尝试让它看不见,但我不认为这是一个合适的选择。

2 个答案:

答案 0 :(得分:1)

如果要删除CCSprite的子类(在本例中为CCMenuItemImage),则使用CCLayer类中的removeChild方法。在这种情况下:

-(void)onRetry{

[self removeChild:lvl1];//This would remove the CCMenuItemImage object called lvl1.


    [m_sGo runAction:[CCSequence actions:actionMove, [CCCallFunc actionWithTarget:self selector:@selector(GoMoveSecond)], nil]];
}

答案 1 :(得分:1)

您需要存储对要移除的子项的引用(即@interface中指向它的指针)。

我很确定你也可以分配一个CCNode标签,所以可能值得研究一下。然后,您可以根据分配给它的标记删除节点。两者都是从父节点removeChild访问的。