Ответ 1
mySprite->setTexture(CCTextureCache::sharedTextureCache()->addImage("newImage.png"));
Не нужно изменять свой собственный класс.. Надеюсь, это поможет..:)
У меня есть объект, унаследованный от CCSprite. Я хочу, чтобы изнутри этого объекта изменилось изображение.
Как изменить изображение (спрайт) без создания нового объекта CCSprite в Cocos2d-X?
Спасибо, Адриан.
mySprite->setTexture(CCTextureCache::sharedTextureCache()->addImage("newImage.png"));
Не нужно изменять свой собственный класс.. Надеюсь, это поможет..:)
Работает для меня:
mySprite->setDisplayFrame(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("frame_name"));
Перед загрузкой спрайтов в кеш:
CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("sprite_atlas.plist");
Я узнал, и я оставляю его здесь, если кто-то застрял с той же проблемой:
Внутри вашего объекта, унаследованного от объекта 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);
}
Поскольку "CCTextureCache:: sharedTextureCache()" теперь устарел (v.3.13.1), вам лучше получить кеш текстуры от директора:
auto texture = Director::getInstance()->getTextureCache()->addImage(filePath);
if (texture)
{
yourSprite->setTexture(texture);
}