我尝试克隆CCNode层次结构,问题是我需要按类型重置并设置所有变量,我可以有一种更自动的方法吗?

我基本上想做的是:
-存储CCNode *(带有一个子对象,例如在Pos 10-10处的图像,在Pos 100-50处的文本为“Test”的标签);
-然后克隆它,以获取具有相同默认值和子元素的新CCNode *。

我需要复制它,因为在获得自定义值之前,它们将得到修改后就像Node的模板一样。

如果您知道一种简单的复制方式,并设置所有层次结构(也使用正确的类型),而无需为每种类型使用大的if / else语句,它将对我有很大帮助^^

谢谢

最佳答案

此代码以递归方式克隆CCNode和所有子CCNode。您可以添加其他子类和其他属性进行复制。

+ (CCNode*) cloneCCNode:(CCNode*)source
{
    CCNode* clone = [CCNode node];
    for (CCNode* srcSubnode in source.children) {

        CCNode* subnode;

        if ([srcSubnode isKindOfClass:[CCSprite class]]) { //only CCSprites are copied, add other subclasses if you need to
            CCSprite* srcSprite = (CCSprite*)srcSubnode;
            subnode = [CCSprite spriteWithTexture:srcSprite.texture];
            ((CCSprite*)subnode).displayFrame = srcSprite.displayFrame;
        } else {
            subnode = [self cloneCCNode:srcSubnode];
        }

        subnode.rotation = srcSubnode.rotation;
        subnode.position = srcSubnode.position;
        subnode.anchorPoint = srcSubnode.anchorPoint;
        subnode.zOrder = srcSubnode.zOrder;
        [clone addChild:subnode];
    }
    return clone;
}

关于cocos2d-iphone - cocos2d:如何克隆CCNode层次结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11936348/

10-15 18:06