我对更改CCSprite的纹理感到有点困惑。
我有:
aTexture[NUM_WALLS+11] = [[CCTexture2D alloc]initWithImage:[UIImage imageNamed:@"shop1.png"]];
[aSprite setTexture:aTexture[NUM_WALLS+11]];和
aTexture[NUM_WALLS+9] = [[CCTexture2D alloc]initWithImage:[UIImage imageNamed:@"bush2.png"]];
[aSprite setTexture:aTexture[NUM_WALLS+9]];这两个图像有两个不同的大小。然而,当我改变纹理时,精灵不会改变大小。相反,图像会缩放到精灵的大小。我以为精灵应该改变大小。
有人能澄清一下吗?
发布于 2012-06-30 20:21:47
图像文件可能具有不同的大小,但纹理可能使用相同的大小,因为它们通常会放大到下一个最近的2的幂(默认情况下,在cocos2d中禁用NPOT纹理支持)。
意思:如果一个图像是150x150,另一个是250x250,它们的纹理都有256x256的尺寸。如果从图像文件加载精灵,cocos2d会将绘制的纹理的实际部分调整为图像的大小(contentSize)。如果更改纹理,cocos2d将只使用纹理的大小,而不考虑纹理中存储的图像的大小-因为该信息在创建纹理后会丢失。
在这种情况下,您必须在精灵上手动调用setTextureRect:,以便在纹理中仅绘制实际图像的区域。
更好的解决方案是使用两种纹理进行create a texture atlas,然后只需更改sprite显示的sprite帧即可。这样做更容易,也节省了内存。
发布于 2012-07-26 20:40:25
对于那些仍然想要使用setTexture的人。
我发现这在这里是有效的:
`CCTexture2D* tex2d = [[CCTexture2D alloc] initWithImage:[UIImage imageNamed:_texture]]; CGSize texSize = [tex2d contentSize]; [sprite setTexture:tex2d]; [sprite setTextureRect:CGRectMake(0, 0, texSize.width, texSize.height)];` setTexture和setTextureRect的顺序很重要。否则它就不会起作用。
发布于 2012-06-30 18:17:36
据我所知,CCSprite使用它的contentSize属性和位置来计算要使用OpenGL绘制的顶点数组。这样,在你改变它的contentSize属性之前,精灵不会改变它的可视大小。
https://stackoverflow.com/questions/11270769
复制相似问题