예제 #1
0
void CCTween::play(CCMovementBoneData *movementBoneData, int durationTo, int durationTween,  int loop, int tweenEasing)
{
    CCProcessBase::play(durationTo, durationTween, loop, tweenEasing);

    if (loop)
    {
        m_eLoopType = ANIMATION_TO_LOOP_FRONT;
    }
    else
    {
        m_eLoopType = ANIMATION_NO_LOOP;
    }

    m_iTotalDuration = 0;
    m_iBetweenDuration = 0;
    m_iFromIndex = m_iToIndex = 0;

    bool difMovement = movementBoneData != m_pMovementBoneData;

    setMovementBoneData(movementBoneData);
    m_iRawDuration = m_pMovementBoneData->duration;

    CCFrameData *nextKeyFrame = m_pMovementBoneData->getFrameData(0);
    m_pTweenData->displayIndex = nextKeyFrame->displayIndex;

    if (m_pBone->getArmature()->getArmatureData()->dataVersion >= VERSION_COMBINED)
    {
        CCTransformHelp::nodeSub(*m_pTweenData, *m_pBone->getBoneData());
        m_pTweenData->scaleX += 1;
        m_pTweenData->scaleY += 1;
    }

    if (m_iRawDuration == 0 || m_pMovementBoneData->frameList.count() == 1)
    {
        m_eLoopType = SINGLE_FRAME;
        if(durationTo == 0)
        {
            setBetween(nextKeyFrame, nextKeyFrame);
        }
        else
        {
            setBetween(m_pTweenData, nextKeyFrame);
        }
        m_eFrameTweenEasing = Linear;
    }
    else if (m_pMovementBoneData->frameList.count() > 1)
    {
        m_iDurationTween = durationTween * m_pMovementBoneData->scale;

        if (loop && m_pMovementBoneData->delay != 0)
        {
            setBetween(m_pTweenData, tweenNodeTo(updateFrameData(1 - m_pMovementBoneData->delay), m_pBetween));
        }
        else
        {
            if (!difMovement || durationTo == 0)
            {
                setBetween(nextKeyFrame, nextKeyFrame);
            }
            else
            {
                setBetween(m_pTweenData, nextKeyFrame);
            }
        }
    }

    tweenNodeTo(0);
}
예제 #2
0
void Tween::play(MovementBoneData *movementBoneData, int durationTo, int durationTween,  int loop, int tweenEasing)
{
    ProcessBase::play(durationTo, durationTween, loop, tweenEasing);

    if (loop)
    {
        _loopType = ANIMATION_TO_LOOP_FRONT;
    }
    else
    {
        _loopType = ANIMATION_NO_LOOP;
    }

    _totalDuration = 0;
    _betweenDuration = 0;
    _fromIndex = _toIndex = 0;

    bool difMovement = movementBoneData != _movementBoneData;

    setMovementBoneData(movementBoneData);
    _rawDuration = _movementBoneData->duration;

    FrameData *nextKeyFrame = _movementBoneData->getFrameData(0);
    _tweenData->displayIndex = nextKeyFrame->displayIndex;

    if (_bone->getArmature()->getArmatureData()->dataVersion >= VERSION_COMBINED)
    {
        TransformHelp::nodeSub(*_tweenData, *_bone->getBoneData());
        _tweenData->scaleX += 1;
        _tweenData->scaleY += 1;
    }

    if (_rawDuration == 0 )
    {
        _loopType = SINGLE_FRAME;
        if(durationTo == 0)
        {
            setBetween(nextKeyFrame, nextKeyFrame);
        }
        else
        {
            setBetween(_tweenData, nextKeyFrame);
        }
        _frameTweenEasing = Linear;
    }
    else if (_movementBoneData->frameList.size() > 1)
    {
        _durationTween = durationTween * _movementBoneData->scale;

        if (loop && _movementBoneData->delay != 0)
        {
            setBetween(_tweenData, tweenNodeTo(updateFrameData(1 - _movementBoneData->delay), _between));
        }
        else
        {
            if (!difMovement || durationTo == 0)
            {
                setBetween(nextKeyFrame, nextKeyFrame);
            }
            else
            {
                setBetween(_tweenData, nextKeyFrame);
            }
        }
    }

    tweenNodeTo(0);
}