/** * 得到動畫動做函數 * animName:動畫幀的名字 * delay:動畫幀與幀之間的間隔時間 * animNum:動畫幀的數量 */ Animation* Start::getAnimationByName(std::string animName,float delay,int animNum){ Animation* animation = Animation::create(); // 循環從精靈幀緩存中獲取與圖片名稱相對應的精靈幀組成動畫 for(unsigned int i = 1;i<=animNum;i++){ // 獲取動畫圖片名稱,例如plane0.png std::string frameName = animName; frameName.append(StringUtils::format("%d",i)).append(".png"); // 將單張圖片添加爲精靈幀(即動畫幀) animation->addSpriteFrameWithFile(frameName.c_str()); } // 設置動畫播放的屬性 animation->setDelayPerUnit(delay); // 讓精靈對象在動畫執行完後恢復到最初狀態 animation->setRestoreOriginalFrame(true); return animation; } Animation* laughAnimation = getAnimationByName("mole_laugh", 0.5f, 3); AnimationCache::getInstance()->addAnimation(laughAnimation, "laughAnimation"); auto laughAnimation = Animate::create(AnimationCache::getInstance()->getAnimation("laughAnimation")); mallet->setScale(0.8f); mallet->setPosition(mole->getPosition().x+100, mole->getPosition().y+60); this->addChild(mallet, 0); // 播放木槌動畫 mallet->runAction(Sequence::create(malletAnimation, CallFunc::create([=]{ // 播放地鼠被打中音效 SimpleAudioEngine::getInstance()->playEffect("ow.caf"); // 地鼠被打中後播放粒子效果 auto aswoon = ParticleSystemQuad::create("aswoon.plist"); aswoon->setPosition(mole->getPosition().x, mole->getPosition().y); this->addChild(aswoon); // 刪除木槌 this->removeChild(mallet); }), NULL));