我尝试克隆CCNode层次结构,问题是我需要重置并按类型设置所有变量,我可以更自动地做到这一点吗?
基本上我想做的是: - 存储CCNode *(带有一些孩子,例如Pos 10-10处的图像,以及位于Pos 100-50处的带有文本“Test”的标签); - 然后克隆它,以获得具有相同默认值和子项的新CCNode *。
我需要复制它,因为在获得自定义值之前,它们将被修改后,就像Node的模板一样。
如果您知道一种简单的复制方式,并设置所有层次结构(也使用正确的类型),对于每种类型没有大的if / else语句,它将对我有很大的帮助^^
感谢
答案 0 :(得分: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;
}