int CCBAnimationManager::getSequenceId(const char* pSequenceName) { CCObject *pElement = NULL; string seqName(pSequenceName); CCARRAY_FOREACH(mSequences, pElement) { CCBSequence *seq = (CCBSequence*)pElement; if (seqName.compare(seq->getName()) == 0) { return seq->getSequenceId(); } }
void CcbBase::update(float delta) { if (_needCallBack) { _needCallBack = false; CCArray *arr = m_pCCBReader->getAnimationManager()->getSequences(); CCBSequence* curSeq = NULL; CCObject *pElement = NULL; CCARRAY_FOREACH(arr, pElement) { CCBSequence *seq = (CCBSequence*)pElement; if (seq->getSequenceId() == _index) { curSeq = seq; break; } } if (curSeq) { m_pCCBReader->getAnimationManager()->runAnimationsForSequenceIdTweenDuration(_index, 0); setAnimationCompletedCallback(this, callfunc_selector(CcbBase::animationCompletedCallback)); float dt = (CSystem::currentTimeMillis() - _startTime) / 1000.0f; dt = dt + _skipTime - curSeq->getDuration(); while (dt > curSeq->getDuration()) { dt -= curSeq->getDuration(); } // dt可能为负数 暂时忽略不计 if(dt > 0) skip(m_pCcbNode, dt); _skipTime = dt > 0 ? dt : 0; _startTime = CSystem::currentTimeMillis(); // CCLOG("m_pCcbNode:%d skipTime:%f",m_pCcbNode, dt); } }