cocos2d-xでCCSpriteFrame を使って初期化したCCSpriteの画像を別のものに変更したい場合、setTextureでは表示が更新されなかったので、調べた結果をメモ。
このような場合、setTextureRect()とsetDisplayFrame()でスプライトフレーム内の参照位置を更新することで切り替えが可能。
特にCCSpriteBatchNodeと組み合わせる場合、同一SpriteFrame内での切り替えになりますので、このやり方が必要になるかも。
CCSprite *sprite;
// SpriteFrameで初期化
sprite = CCSprite::spriteWithSpriteFrameName("hoge.png");
・
・
色々な処理
・
・
//SpriteFrameの画像を変更する
CCSpriteFrame *frame = CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("fuga.png");
sprite->setTexture(frame->getTexture());
sprite->setTextureRect(frame->getRect());
sprite->setDisplayFrame(frame);
以上