【问题标题】:cocos2d : How to clone a CCNode hierarchycocos2d : 如何克隆 CCNode 层次结构
【发布时间】:2012-08-13 14:26:29
【问题描述】:

我尝试克隆 CCNode 层次结构,问题是我需要按类型重置和设置所有变量,我有办法更自动地做到这一点吗?

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

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

如果您知道一种简单的复制方法,并设置所有层次结构(也具有正确的类型),并且每种类型都没有大的 if/else 语句,那将对我有很大帮助^^

谢谢

【问题讨论】:

    标签: cocos2d-iphone clone hierarchy ccnode


    【解决方案1】:

    此代码递归地克隆 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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-09
      • 2019-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多