首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CCSprite纹理大小

CCSprite纹理大小
EN

Stack Overflow用户
提问于 2012-06-30 09:31:58
回答 4查看 1.7K关注 0票数 0

我对更改CCSprite的纹理感到有点困惑。

我有:

代码语言:javascript
复制
aTexture[NUM_WALLS+11] = [[CCTexture2D alloc]initWithImage:[UIImage imageNamed:@"shop1.png"]];
[aSprite setTexture:aTexture[NUM_WALLS+11]];

代码语言:javascript
复制
aTexture[NUM_WALLS+9] = [[CCTexture2D alloc]initWithImage:[UIImage imageNamed:@"bush2.png"]];
[aSprite setTexture:aTexture[NUM_WALLS+9]];

这两个图像有两个不同的大小。然而,当我改变纹理时,精灵不会改变大小。相反,图像会缩放到精灵的大小。我以为精灵应该改变大小。

有人能澄清一下吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-06-30 20:21:47

图像文件可能具有不同的大小,但纹理可能使用相同的大小,因为它们通常会放大到下一个最近的2的幂(默认情况下,在cocos2d中禁用NPOT纹理支持)。

意思:如果一个图像是150x150,另一个是250x250,它们的纹理都有256x256的尺寸。如果从图像文件加载精灵,cocos2d会将绘制的纹理的实际部分调整为图像的大小(contentSize)。如果更改纹理,cocos2d将只使用纹理的大小,而不考虑纹理中存储的图像的大小-因为该信息在创建纹理后会丢失。

在这种情况下,您必须在精灵上手动调用setTextureRect:,以便在纹理中仅绘制实际图像的区域。

更好的解决方案是使用两种纹理进行create a texture atlas,然后只需更改sprite显示的sprite帧即可。这样做更容易,也节省了内存。

票数 2
EN

Stack Overflow用户

发布于 2012-07-26 20:40:25

对于那些仍然想要使用setTexture的人。

我发现这在这里是有效的:

代码语言:javascript
复制
 `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的顺序很重要。否则它就不会起作用。

票数 2
EN

Stack Overflow用户

发布于 2012-06-30 18:17:36

据我所知,CCSprite使用它的contentSize属性和位置来计算要使用OpenGL绘制的顶点数组。这样,在你改变它的contentSize属性之前,精灵不会改变它的可视大小。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11270769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档