Beispiel #1
0
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);
		}
	}
Beispiel #2
0
void BBaseCCBOwner::delAnimationCompletedCallback()
{
    setAnimationCompletedCallback(NULL, NULL);
}