I have an object that inherited from CCSprite. I want from inside this object to change the image.
How do I change the image (sprite) without creating a new CCSprite object in Cocos2d-X?
Thanks, Adrian.
mySprite->setTexture(CCTextureCache::sharedTextureCache()->addImage("newImage.png"));
No need to alter your custom class.. Hope this helps.. :)
Works for me:
mySprite->setDisplayFrame(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("frame_name"));
Before you need to load you sprites in cache:
CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("sprite_atlas.plist");
I found out, and I leave it here in case somebody gets stuck with the same problem:
Inside your object that's inherited from CCSprite object, write a function as follows
void MyObject::UpdateImage(Char * PngName)
{
/* Create Image */
CCImage *MyImage = new CCImage();
MyImage->initWithImageFile( PngName ); /*the pngName is an image file in your resource folder */
/* Create Texture from Image */
CCTexture2D *MyTexture = new CCTexture2D();
MyTexture->initWithImage(MyImage);
/* Set the Texture */
this->setTexture(MyTexture);
}
Since "CCTextureCache::sharedTextureCache()" is now deprecated (v.3.13.1) you'd better get the texture cache from the Director:
auto texture = Director::getInstance()->getTextureCache()->addImage(filePath);
if (texture)
{
yourSprite->setTexture(texture);
}
来源:https://stackoverflow.com/questions/10456040/how-to-swap-the-sprite-in-the-ccsprite-object-in-cocos2d-x