Не могу добавить несколько ресурсов стручка на сцену
Я пытаюсь использовать Cocos3D
и мне нужно показать несколько трехмерных объектов, размещенных на сфере перед камерой. Итак, вот мой код:
@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);
...
}
Так что я не вижу вторую стрелу на моей сцене. Как я могу решить это?
1 ответ
В Cocos3D ресурсы кэшируются. Загрузка одного и того же ресурса POD дважды, как вы делаете, приведет к обоим CC3PODResourceNode
пытаясь использовать тот же контент. Поскольку любой узел может иметь только одного родителя, вторая загрузка приводит к перемещению потомков первого CC3PODResourceNode
экземпляр ко второму экземпляру, оставляя первый CC3PODResourceNode
экземпляр без потомков.
Вместо того, чтобы пытаться загрузить несколько копий одного и того же файла ресурсов, просто скопируйте узлы, которые вы хотите дублировать. Копирование узла выполняет глубокое копирование, а также копирование всех узлов-потомков. Чтобы сохранить память, содержимое вершин сетки, которое является статическим и может быть довольно большим, не копируется, и два или более узла могут совместно использовать одно и то же содержимое сетки.
Для вашего примера следующее должно дать вам то, что вы хотите:
resNode = [rezNode copy];
resNode.rotation = CC3VectorMake(90, 0, 0);
[self addChild: resNode];
Так как scale
а также location
свойства обоих узлов одинаковы, копия позаботится об их установке во втором экземпляре.