3

CCNode階層のクローンを作成しようとしていますが、問題は、すべての変数をタイプごとにリセットして設定する必要があることです。これをより自動的に行う方法はありますか?

基本的に私がやりたいことは次のとおりです。-CCNode*を保存します(たとえば、Pos 10-10の画像と、Pos 100-50のラベルに「Test」というテキストを付けます)。-次に、それを複製して、同じデフォルト値と子を持つ新しいCCNode*を取得します。

変更を取得した後、カスタム値を取得する前のノードのテンプレートのようなものであるため、コピーする必要があります。

タイプごとに大きなif/elseステートメントを使用せずに、すべての階層を(正しいタイプでも)コピーして設定する簡単な方法を知っている場合は、非常に役立ちます^^

ありがとう

4

1 に答える 1

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;
}
于 2012-11-27T11:51:56.740 に答える