Как поменять спрайт в объекте 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
Ответ 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