Как поменять спрайт в объекте CCSprite в Cocos2d-X

У меня есть объект, унаследованный от CCSprite. Я хочу, чтобы изнутри этого объекта изменилось изображение.

Как изменить изображение (спрайт) без создания нового объекта CCSprite в Cocos2d-X?

Спасибо, Адриан.

Ответ 1

mySprite->setTexture(CCTextureCache::sharedTextureCache()->addImage("newImage.png"));

Не нужно изменять свой собственный класс.. Надеюсь, это поможет..:)

Ответ 2

Работает для меня:

mySprite->setDisplayFrame(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("frame_name"));

Перед загрузкой спрайтов в кеш:

CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("sprite_atlas.plist");

Ответ 3

Я узнал, и я оставляю его здесь, если кто-то застрял с той же проблемой:

Внутри вашего объекта, унаследованного от объекта CCSprite, напишите функцию следующим образом

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

Ответ 4

Поскольку "CCTextureCache:: sharedTextureCache()" теперь устарел (v.3.13.1), вам лучше получить кеш текстуры от директора:

auto texture = Director::getInstance()->getTextureCache()->addImage(filePath);

if (texture)
{
    yourSprite->setTexture(texture);
}

Источник: http://www.cocos2d-x.org/wiki/Texture_Cache