Невозможно добавить в сцену несколько ресурсов pod

Я пытаюсь использовать Cocos3D, и мне нужно показать несколько 3D-объектов, размещенных на сфере перед камерой. Итак, вот мой код:

@interface cocos3d_testScene : CC3Scene {
    CC3ResourceNode* rezNode;
    CC3ResourceNode* resNode;
}

- (void) onOpen {
...
    rezNode = [CC3PODResourceNode nodeFromFile: @"arrow.pod"];
    rezNode.scale = CC3VectorMake(0.03, 0.03, 0.03);
    rezNode.rotation = CC3VectorMake(90, 90, 0);
    [self addChild: rezNode];
    rezNode.location = CC3VectorMake(0, 0, -1.9);

    resNode = [CC3PODResourceNode nodeFromFile: @"arrow.pod"];
    resNode.scale = CC3VectorMake(0.03, 0.03, 0.03);
    resNode.rotation = CC3VectorMake(90, 0, 0);
    [self addChild:resNode];
    resNode.location = CC3VectorMake(0, 0, -1.9);
...
}

Поэтому я не вижу вторую стрелку на своей сцене. Как я могу это решить?


person ShurupuS    schedule 18.08.2014    source источник


Ответы (1)


В Cocos3D ресурсы кэшируются. Двойная загрузка одного и того же ресурса POD приведет к тому, что оба CC3PODResourceNode попытаются использовать один и тот же контент. Поскольку любой узел может иметь только одного родителя, вторая загрузка приводит к перемещению потомков первого экземпляра CC3PODResourceNode во второй экземпляр, оставляя первый экземпляр CC3PODResourceNode без потомков.

Вместо того, чтобы пытаться загрузить несколько копий одного и того же файла ресурсов, просто скопируйте узлы, которые вы хотите дублировать. При копировании узла выполняется глубокое копирование, а также копирование всех узлов-потомков. Для сохранения памяти содержимое вершин сетки, которое является статическим и может быть довольно большим, не копируется, и два или более узла могут совместно использовать одно и то же содержимое сетки.

В вашем примере следующее должно дать вам то, что вы хотите:

    resNode = [rezNode copy];
    resNode.rotation = CC3VectorMake(90, 0, 0);
    [self addChild: resNode];

Поскольку свойства scale и location обоих узлов одинаковы, копия позаботится об их установке во втором экземпляре.

person Bill Hollings    schedule 19.08.2014