改变POD对象的纹理

时间:2014-07-17 01:15:26

标签: objective-c cocos3d

我刚刚开始使用cocos3d并且我正在制作基本的纸牌游戏。我已经有了纹理模型,但我不知道如何指定用于给定对象或节点的纹理。我已经加载了纹理模型并使用基本的cocos3d模板进行渲染。这是我的设置代码:

//Init
for ( int i = 0; i < 5; ++i )
{
    cardNodes[i] = [CC3PODResourceNode nodeFromFile: @"Card.pod"];
    [self addChild:cardNodes[i]];
    cardNodes[i].location = cc3v ( ( i - 2)*7.5, 0, 0);
    cardNodes[i].rotation = cc3v ( 0,-90,180);
}

-(void) startGame
{
    srand(0);

    //Draw 5 random cards
    unsigned int cards[5] = {0};
    for ( unsigned int i = 0; i < 5; ++i )
    {
        unsigned int card = ( rand() % 52 ) + 1;
        for ( int other = i-1; other >= 0; --other )
        {
            if ( cards[other] == card )
            {
                card = ( rand() % 52 ) + 1;
                other = i-1;
            }
        }
        cards[i] = card;
        //Set texture of card node[i] somehow here?
    }
}

那么如何更改正在使用的纹理,以便我不必为每张卡创建新的pod文件?

1 个答案:

答案 0 :(得分:0)

重复加载POD文件不会在内存中创建多个副本。这是因为底层CC3PODResource被缓存(故意),所以你最终会在每个数组元素中引用相同的模型。

相反,您应该加载卡POD一次,然后使用标准copy方法创建它的副本。这是一个有效的副本。它复制可配置属性,但重用相同的底层网格顶点。然后,您可以单独定位,着色和纹理卡片副本。

要为单个卡指定纹理,只需使用texture属性。

CC3DemoMashUp包含许多为模型分配纹理以及制作单个网格节点的许多副本的示例。例如,在运行演示时尝试按网格按钮。