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