How to swap the sprite in the CCSprite object in C

2019-03-25 11:20发布

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.

4条回答
够拽才男人
2楼-- · 2019-03-25 11:22

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);
}
查看更多
趁早两清
3楼-- · 2019-03-25 11:26

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);
}

Source: http://www.cocos2d-x.org/wiki/Texture_Cache

查看更多
家丑人穷心不美
4楼-- · 2019-03-25 11:28

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");
查看更多
冷血范
5楼-- · 2019-03-25 11:48
mySprite->setTexture(CCTextureCache::sharedTextureCache()->addImage("newImage.png"));

No need to alter your custom class.. Hope this helps.. :)

查看更多
登录 后发表回答