【已解决】ccsprite换图

大致流程这样:

目的是修改原有sprite的数据,使得sprite的纹理发生改变

1、有一个SpriteA;
根据SpriteA的数据重新创建了一个Texture;

2、然后再对SpriteA进行操作: SpriteA->setTexture(Texture);
SpriteA不显示了。

3、然后生成了一下SpriteB: CCSprite::spriteWithTexture(Texture)
SpriteB显示正常,说明Texture有效。

4、对SpriteA做这样的操作:

CCSprite* SpriteB= CCSprite::spriteWithTexture(Texture);
*SpriteA= *SpriteB;
SpriteA->getTexture()->retain();

delete SpriteB;
SpriteB = NULL;

5、SpriteA显示正常,为预期效果。

那么问题是:1、为什么第二步之后,SpriteA不显示了? 2、第四步可行,理解没错的话是进行了一次深拷贝,但是第四步会有内存泄露,为什么呢? 第四步这样的写法有什么问题?

求大神们能够解释下下:904:

求解答啊。。。

自己解答下:
1、为什么第二步之后,SpriteA不显示了?
这是因为只是对SpriteA进行了setTexture(Texture);
却没有设置纹理的Rect,
应该增加这样一步:
CCRect rect = CCRectZero;
rect.size = Texture->getContentSize();
pSprite->setTextureRect(rect);

2、第四步可行,理解没错的话是进行了一次深拷贝,但是第四步会有内存泄露,为什么呢? 第四步这样的写法有什么问题?

其实不需要这么麻烦,解决第一个问题,SpriteA就已经显示。至于内存泄露,是因为,“根据SpriteA的数据重新创建了一个Texture”这步时,New了一个临时CCRenderTexture,最后没有删除。

哈哈,一切OK

:2:

标题应该为:ccsprite 变灰