无法向场景添加多个容器资源



我尝试使用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);
...
}

所以我在场景中看不到第二个箭头。我怎么解决这个问题?

Cocos3D中,资源被缓存。正如您所做的那样,两次加载相同的POD资源将导致两个CC3PODResourceNode尝试使用相同的内容。由于任何节点只能有一个父节点,第二次加载的效果是将第一个CC3PODResourceNode实例的后代移动到第二个实例,使第一个CC3PODResourceNode实例没有后代。

不需要尝试加载相同资源文件的多个副本,只需复制想要复制的节点。复制节点执行深度复制,同时复制所有后代节点。为了节省内存,网格顶点内容是静态的,可能相当大,不被复制,两个或多个节点可以共享相同的网格内容。

对于你的例子,下面应该可以得到你想要的:

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

由于两个节点的scalelocation属性是相同的,复制将负责在第二个实例中设置它们。

相关内容

  • 没有找到相关文章

最新更新