我刚刚开始使用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文件?
答案 0 :(得分:0)
重复加载POD文件不会在内存中创建多个副本。这是因为底层CC3PODResource
被缓存(故意),所以你最终会在每个数组元素中引用相同的模型。
相反,您应该加载卡POD一次,然后使用标准copy
方法创建它的副本。这是一个有效的副本。它复制可配置属性,但重用相同的底层网格顶点。然后,您可以单独定位,着色和纹理卡片副本。
要为单个卡指定纹理,只需使用texture
属性。
CC3DemoMashUp
包含许多为模型分配纹理以及制作单个网格节点的许多副本的示例。例如,在运行演示时尝试按网格按钮。