cocos2d: как клонировать иерархию CCNode
Я пытаюсь клонировать иерархию CCNode, проблема в том, что мне нужно сбросить и установить все переменные по типу, могу ли я сделать это более автоматически?
В основном, я хочу сделать следующее: - сохранить CCNode* (с некоторым дочерним элементом, например, изображением в позе 10-10 и меткой в позе 100-50 с текстом "Тест"); - затем клонируйте его, чтобы получить новый CCNode * с тем же значением по умолчанию и потомками.
Мне нужно скопировать его, потому что после того, как они получат модификацию, это как шаблон узла, прежде чем получить пользовательское значение.
Если вы знаете простой способ копирования и настройки всей иерархии (с правильным типом), без большого оператора if/else для каждого типа, это мне очень поможет ^^
Спасибо
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;
}