方法一:
//創建精靈
CCSprite *pSprite = CCSprite::create("audio_on.png");
//創建紋理
CCTexture2D *texture = CCTextureCache::sharedTextureCache()->addImage("audio_off.png");
//給精靈設置新的紋理
pSprite->setTexture(texture);
方法二:
CCSprite* pSprite = CCSprite::create("HelloWorld.png");
CCSprite* pSprite2 = CCSprite::create("bg2.png");
pSprite->setPosition(ccp(11,22));
pSprite2->setPosition(ccp(22,33));
this->addChild(pSprite, 0);
this->addChild(pSprite2, 1);
//需要注意的是displayFrame(),前提是你的精靈是addChild()到場景中的,不然獲得的displayFrame會為空
//pSprite設置當前顯示幀為pSprite2正在顯示的的幀(完成更換)
pSprite->setDisplayFrame(pSprite2->displayFrame());
方法三:
我們可以使用
CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("res.plist");
來代替
CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("res.plist","res.png");
因為當參數僅為res.plist文件時,函數會自動尋找對應的res.png文件。
當使用2個參數時,我們可以手動指定加載的png的名字,比如我們想加載res.plist來解析demo.png時,可以這樣指定:
CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("res.plist","demo.png");
當執行完上面的語句時,TP打包后的圖片就已經載入內存了,我們就可以使用plist里面定義的key值來使用我們想要的圖片(res1.png、res2.png)
//載入TP打包的plist和png文件到內存(有2張圖片分別是res1.png和res2.png)
CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("res.plist","res.png");
//創建精靈
pSprite = CCSprite::createWithSpriteFrameName("res2.png");
pSprite->setPosition(ccp(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));
this->addChild(pSprite, 0);
//創建精靈幀
CCSpriteFrame* f = CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("res1.png");
//更換圖片
pSprite->setDisplayFrame(f);
還有就是直接創建Frame:
如下:



至於newSpriteFrame怎么實現的,可以看源碼,然后轉換成cocos2dx的c++寫法就好了。
