void Trooper::animate(const char* animationName, ...){ va_list params; va_start(params, animationName); const char* nextName = animationName; if (m_current_sprite != NULL && m_animate_action != NULL){ m_current_sprite->stopAction(m_animate_action); m_animate_action = NULL; } CCArray* animations = CCArray::array(); while (nextName){ CCAnimation* anim = TFAnimationCache::sharedAnimationCache()->animationByName(nextName); if (m_current_sprite == NULL){ m_current_sprite = CCSprite::spriteWithSpriteFrame(anim->getFrames()->getObjectAtIndex(0)); this->addChild(m_current_sprite); } CCCallFuncO* notifyAction = CCCallFuncO::actionWithTarget(this, callfuncO_selector(Trooper::onAnimationStart), new CCString(nextName)); animations->addObject(notifyAction); nextName = va_arg(params, const char*); if (nextName == NULL){ CCCallFuncO* animAction = CCCallFuncO::actionWithTarget(this, callfuncO_selector(Trooper::animateForever), anim); animations->addObject(animAction); animAction->retain(); } else { animations->addObject(CCAnimate::actionWithAnimation(anim)); } notifyAction->retain(); } m_current_sprite->runAction(CCSequence::actionsWithArray(animations)); va_end(params); animations->retain(); }
void Trooper::animateForever(CCObject* animation){ CCAnimation* anim = (CCAnimation*)animation; if (m_current_sprite != NULL && m_animate_action != NULL){ m_current_sprite->stopAction(m_animate_action); m_animate_action = NULL; } if (m_current_sprite == NULL){ m_current_sprite = CCSprite::spriteWithSpriteFrame(anim->getFrames()->getObjectAtIndex(0)); } m_animate_action = CCRepeatForever::actionWithAction(CCAnimate::actionWithAnimation(anim)); m_current_sprite->runAction(m_animate_action); }
void CAImageView::setDisplayFrameWithAnimationName(const char *animationName, int frameIndex) { CCAssert(animationName, "CCSprite#setDisplayFrameWithAnimationName. animationName must not be NULL"); CCAnimation *a = CCAnimationCache::sharedAnimationCache()->animationByName(animationName); CCAssert(a, "CCSprite#setDisplayFrameWithAnimationName: Frame not found"); CCAnimationFrame* frame = (CCAnimationFrame*)a->getFrames()->objectAtIndex(frameIndex); CCAssert(frame, "CCSprite#setDisplayFrame. Invalid frame"); setDisplayFrame(frame->getSpriteFrame()); }
// XXX deprecated void CCSprite::setDisplayFrame(const char *pszAnimationName, int nFrameIndex) { if (! m_pAnimations) { initAnimationDictionary(); } CCAnimation *pAnimation = m_pAnimations->objectForKey(std::string(pszAnimationName)); CCSpriteFrame *pFrame = pAnimation->getFrames()->getObjectAtIndex(nFrameIndex); assert(pFrame); setDisplayFrame(pFrame); }
void CCSprite::setDisplayFrameWithAnimationName(const char *animationName, int frameIndex) { assert(animationName); CCAnimation *a = CCAnimationCache::sharedAnimationCache()->animationByName(animationName); assert(a); CCSpriteFrame *frame = a->getFrames()->getObjectAtIndex(frameIndex); assert(frame); setDisplayFrame(frame); }
void BattleCharacter::RemoveFromBattle() { EventHandler* pHandler = EventHandler::instance(); AnimationManager* pManger = AnimationManager::instance(); CCAnimation* pVanishAnimation =pManger->CreateMapCharacterVanishAnimation(); CCSprite* pVanish = CCSprite::createWithSpriteFrame(dynamic_cast<CCAnimationFrame*>(pVanishAnimation->getFrames()->objectAtIndex(0))->getSpriteFrame()); pVanish->setPosition(ccp(this->GetMapPositionX(),this->GetMapPositionY())); //注册事件 EventHandler::instance()->OnCharacterRemoveFromBattle(this); //移除自身地图精灵 m_pMapSprites->removeFromParentAndCleanup(true); m_pHPBarOff->removeFromParentAndCleanup(true); m_pHPBar->removeFromParentAndCleanup(true); //加入消除精灵 m_pMap->addChild(pVanish); pVanish->runAction(CCSequence::create(CCAnimate::create(pVanishAnimation),CCCallFuncND::create(pManger,callfuncND_selector(AnimationManager::RemoveAniamationSprite),(void*)pVanish),NULL)); m_pMap->GetUnits()->removeObject(this); }
bool BattleCharacter::SimulationSkill(BattleCharacter* pInvoker,CCArray* pTargets) { CCArray* pEffectTargets =CCArray::createWithCapacity(pTargets->count()); pEffectTargets->retain(); bool bCommandSuc = false; for(unsigned int index = 0;index<pTargets->count();index++) { SkillDataLoader* pData = SkillDataLoader::instance(); int nID = pInvoker->m_nOnUseID; int nType = 0; pData->GetSkillValue(DATA_SKILL_TYPE,nID,&nType); BattleCharacter* pTarget = (BattleCharacter*)pTargets->objectAtIndex(index); //判断是否产生伤害 bool bDamage = (nType == SKILL_TYPE_DAMAGE)||(nType == SKILL_TYPE_DAMAGE_AND_HEALING); bool bHealing = (nType == SKILL_TYPE_HEALING)||(nType == SKILL_TYPE_DAMAGE_AND_HEALING); if(bDamage&&(!pInvoker->InSameRace(pTarget))) { int nDamage = BattleCharacter::GetSkillHPDam(pInvoker,pTarget); pTarget->m_nHP += -nDamage; pTarget->m_nHPoffset += -nDamage; //pTarget->ShowMapDam(nDamage); //pTarget->RefreshHPBar(); bCommandSuc = true; AquireExpFromAttack(pInvoker,pTarget); if (!pEffectTargets->containsObject(pTarget)) { pEffectTargets->addObject(pTarget); } } else if(bHealing&&pInvoker->InSameRace(pTarget)) { int nHealing = BattleCharacter::GetSkillHPHeal(pInvoker,pTarget); pTarget->m_nHP += nHealing; pTarget->m_nHPoffset += nHealing; bCommandSuc = true; AquireExpFromAttack(pInvoker,pTarget); if (!pEffectTargets->containsObject(pTarget)) { pEffectTargets->addObject(pTarget); } } } if(bCommandSuc) { CCArray* pAnimations = AnimationManager::instance()->CreateMapSkillAnimations(pInvoker->m_nOnUseID); CCAnimation* pMapSkillAnimation = (CCAnimation*)pAnimations->objectAtIndex(0); CCSprite* pMapSkillSprite = CCSprite::createWithSpriteFrame(dynamic_cast<CCAnimationFrame*>(pMapSkillAnimation->getFrames()->objectAtIndex(0))->getSpriteFrame()); CCSprite* pMapSkillBackgroundSprite = NULL; CCAnimation* pMapSkillBackgroundAniation = NULL; if (pAnimations->count()>1) { pMapSkillBackgroundAniation = (CCAnimation*)pAnimations->lastObject(); pMapSkillBackgroundSprite = CCSprite::createWithSpriteFrame(dynamic_cast<CCAnimationFrame*>(pMapSkillBackgroundAniation->getFrames()->objectAtIndex(0))->getSpriteFrame()); } if (pMapSkillBackgroundSprite!=NULL) { pMapSkillBackgroundSprite->setPosition(ccp(pInvoker->m_nCommandX,pInvoker->m_nCommandY)); CharacterStatus::m_pMap->addChild(pMapSkillBackgroundSprite,MAX_LAYER_ZORDER-1,LAYER_MAPSKILLBACKGROUND_ID); pMapSkillBackgroundSprite->runAction(CCRepeatForever::create(CCAnimate::create(pMapSkillBackgroundAniation))); pMapSkillSprite->setPosition(ccp(pMapSkillBackgroundSprite->getPositionX(),pMapSkillBackgroundSprite->getPositionY()+GetSpriteTextureHeight(pMapSkillBackgroundSprite))); } else { pMapSkillSprite->setPosition(ccp(pInvoker->m_nCommandX,pInvoker->m_nCommandY)); } CharacterStatus::m_pMap->addChild(pMapSkillSprite,MAX_LAYER_ZORDER); pMapSkillSprite->runAction(CCSequence::create(CCAnimate::create(pMapSkillAnimation),CCCallFuncND::create(pInvoker,callfuncND_selector(BattleCharacter::MapSkillEffectsCallBack),(void*)pEffectTargets),NULL)); } return bCommandSuc; }