各種方法創建Sprite和Animate
//圖片創建法 參數一:圖片資源路徑 參數二:Rect選區 auto sprite = Sprite::create("Images/grossini_dance_atlas.png", Rect(x, y, 85, 121)); addChild(sprite); /*************華麗分割線*************/ //BatchNode類紋理創建法 //參數一:紋理圖片 參數二:容量(子節點數量上限) auto batchNode = SpriteBatchNode::create("Images/grossini_dance_atlas.png", 50); //參數一:獲取紋理 參數二:Rect選區 auto sprite = Sprite::createWithTexture(batchNode->getTexture(), Rect(x, y, 85, 121)); batchNode->addChild(sprite); addChild(batchNode); /*************華麗分割線*************/ //精靈幀緩存SpriteFrameCache創建法 SpriteFrameCache::getInstance()->addSpriteFramesWithFile("animations/ghosts.plist", "animations/ghosts.png"); auto sprite = Sprite::createWithSpriteFrameName("father.gif"); addChild(sprite); /*************華麗分割線*************/ //BatchNode + SpriteFrameCache + Sprite 組合使用 SpriteFrameCache::getInstance()->addSpriteFramesWithFile("animations/ghosts.plist", "animations/ghosts.png"); auto batchNode = SpriteBatchNode::create("animations/ghosts.png"); auto sprite = Sprite::createWithSpriteFrameName("father.gif"); batchNode->addChild(sprite); addChild(batchNode); /*************華麗分割線*************/ //紋理創建法 auto texture = Director::getInstance()->getTextureCache()->addImage("animations/dragon_animation.png"); auto frame = SpriteFrame::createWithTexture(texture, Rect(132 * 0, 132 * 0, 132, 132)); auto sprite = Sprite::createWithSpriteFrame(frame); /*************華麗分割線*************/ //SpriteFrameCache創建動畫法 auto cache = SpriteFrameCache::getInstance(); cache->addSpriteFramesWithFile("animations/grossini-aliases.plist", "animations/grossini-aliases.png"); auto sprite = Sprite::createWithSpriteFrameName("grossini_dance_01.png"); Vector<SpriteFrame*> animFrames(15); char str[100] = { 0 }; for (int i = 1; i < 15; i++) { sprintf(str, "grossini_dance_%02d.png", i); auto frame = cache->getSpriteFrameByName(str); animFrames.pushBack(frame); } auto animation = Animation::createWithSpriteFrames(animFrames, 0.3f); sprite->runAction(RepeatForever::create(Animate::create(animation))); /*************華麗分割線*************/ //AnimationCache加載animation創建動畫法 auto animationCache = AnimationCache::getInstance(); auto animation = Animation::createWithSpriteFrames(animFrames, 0.2f); //參數一:animation 參數二:綁定別名 animationCache->addAnimation(animation, "dance_blue"); auto dance_blue = animationCache->getAnimation("dance_blue"); /*************華麗分割線*************/ //AnimationCache加載plist文件創建動畫法 auto frameCache = SpriteFrameCache::getInstance(); frameCache->addSpriteFramesWithFile("animations/grossini.plist"); auto animationCache = AnimationCache::getInstance(); animationCache->addAnimationsWithFile("animations/animations.plist"); auto normal = animationCache->getAnimation("dance_1"); /*************華麗分割線*************/ //動態加載紋理方法 std::string plist_content; //plist文件數據 { std::string fullPath = FileUtils::getInstance()->fullPathForFilename("animations/grossini.plist"); Data data = FileUtils::getInstance()->getDataFromFile(fullPath); if (!data.isNull()) plist_content.assign((const char*)data.getBytes(), data.getSize()); } std::string image_content; //圖片文件數據 { std::string fullPath = FileUtils::getInstance()->fullPathForFilename("animations/grossini.png"); Data data = FileUtils::getInstance()->getDataFromFile(fullPath); if (!data.isNull()) image_content.assign((const char*)data.getBytes(), data.getSize()); } Image image; image.initWithImageData((const uint8_t*)image_content.c_str(), image_content.size()); Texture2D* texture = new (std::nothrow) Texture2D(); texture->initWithImage(&image); texture->autorelease(); auto cache = SpriteFrameCache::getInstance(); cache->addSpriteFramesWithFileContent(plist_content, texture);
常用的API介紹
AnimationCache類
通過名字和動畫添加到緩存。
void addAnimation (Animation *animation, const std::string &name)
從plist文件添加一個動畫,確保SpriteFrameCache的幀在之前就加載過了。
void addAnimationsWithFile (const std::string &plist)
返回一個之前添加的動畫。 如果沒有找到它將返回空。
Animation * getAnimation (const std::string &name)
從緩存中刪除一個動畫。
void removeAnimation (const std::string &name)
清除緩存,它會釋放所有的動畫對象和共享實例。
static void destroyInstance ()
SpriteFrameCache類
從 plist 文件添加多個 SpriteFrame,會自動加載相應的紋理。 當 plist 文件中未指定使用的 texture 文件時,plist 文件的擴展名替換為 .png 即為紋理文件的名稱。
void addSpriteFramesWithFile (const std::string &plist)
使用指定的 plist 文件與紋理文件加載 SpriteFrame。
void addSpriteFramesWithFile(const std::string& plist,const std::string& textureFileName)
添加一個 SpriteFrame 並指定其名稱。
void addSpriteFrame (SpriteFrame *frame, const std::string &frameName)
獲取指定名稱的 SpriteFrame。
SpriteFrame * getSpriteFrameByName (const std::string &name)
檢查一個 plist 文件是否已經被加載。
bool isSpriteFramesWithFileLoaded (const std::string &plist) const
清理已加載的 SpriteFrame。
void removeSpriteFrames ()
根據指定的名稱從緩存中刪除一個 SpriteFrame。
void removeSpriteFrameByName (const std::string &name)
釋放未使用的 SpriteFrame。 引用計數為 1 的 SpriteFrame 將被刪除。 在進入一個新的場景時,可以通過調用該方法方便的釋放不再使用的 SpriteFrame。
void removeUnusedSpriteFrames ()
將指定的 plist 文件中的 SpriteFrame 從緩存中刪除
void removeSpriteFramesFromFile (const std::string &plist)
銷毀 SpriteFrameCache 的實例。會釋放所有的 SpriteFrame 和 retain 的實例。
static void destroyInstance()