无法向场景添加多个pod资源

时间:2014-08-18 11:03:18

标签: ios objective-c cocos3d

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

所以我看不到我场景中的第二个箭头。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

Cocos3D 中,资源会被缓存。像往常一样加载相同的POD资源两次将导致CC3PODResourceNode尝试使用相同的内容。由于任何节点只能有一个父节点,因此第二个节点具有将第一个CC3PODResourceNode实例的后代移动到第二个实例的效果,使第一个CC3PODResourceNode实例没有后代。

只需复制要复制的节点,而不是尝试加载同一资源文件的多个副本。复制节点会执行深层复制,也会复制所有后代节点。为了保留内存,不会复制静态且可能非常大的网格顶点内容,并且两个或多个节点可以共享相同的网格内容。

对于您的示例,以下内容可以为您提供所需内容:

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

由于两个节点的scalelocation属性相同,因此副本将负责在第二个实例中设置它们。