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;
}
Другие вопросы по тегам