Пример #1
0
void BezierBy::update(float time)
{
    if (_target)
    {
        float xa = 0;
        float xb = _config.controlPoint_1.x;
        float xc = _config.controlPoint_2.x;
        float xd = _config.endPosition.x;

        float ya = 0;
        float yb = _config.controlPoint_1.y;
        float yc = _config.controlPoint_2.y;
        float yd = _config.endPosition.y;

        float x = bezierat(xa, xb, xc, xd, time);
        float y = bezierat(ya, yb, yc, yd, time);

#if CC_ENABLE_STACKABLE_ACTIONS
        Point currentPos = _target->getPosition();
        Point diff = currentPos - _previousPosition;
        _startPosition = _startPosition + diff;

        Point newPos = _startPosition + Point(x,y);
        _target->setPosition(newPos);

        _previousPosition = newPos;
#else
        _target->setPosition(ccpAdd( _startPosition, Point(x,y)));
#endif // !CC_ENABLE_STACKABLE_ACTIONS
    }
}
void QuadBezierBy::update(float time)
{
    if (_target)
    {
        float xa = 0;
        float xb = _config.controlPoint.x;
        float xd = _config.endPosition.x;

        float ya = 0;
        float yb = _config.controlPoint.y;
        float yd = _config.endPosition.y;

        float x = bezierat(xa, xb, xd, time);
        float y = bezierat(ya, yb, yd, time);
		
#if CC_ENABLE_STACKABLE_ACTIONS
        Vec2 currentPos = _target->getPosition();
        Vec2 diff = currentPos - _previousPosition;
        _startPosition = _startPosition + diff;

        Vec2 newPos = _startPosition + Vec2(x, y);
        _target->setPosition(newPos);

        _previousPosition = newPos;
#else
        _target->setPosition(_startPosition + Vec2(x, y));
#endif // !CC_ENABLE_STACKABLE_ACTIONS
    }
}
void BWBezierBy::update(float time)
{
    if (m_pTarget)
    {
        float xa = 0;
        float xb = m_sConfig.controlPoint_1.x;
        float xc = m_sConfig.controlPoint_2.x;
        float xd = m_sConfig.endPosition.x;

        float ya = 0;
        float yb = m_sConfig.controlPoint_1.y;
        float yc = m_sConfig.controlPoint_2.y;
        float yd = m_sConfig.endPosition.y;

        float x = bezierat(xa, xb, xc, xd, time);
        float y = bezierat(ya, yb, yc, yd, time);

#if CC_ENABLE_STACKABLE_ACTIONS
        CCPoint currentPos = m_pTarget->getPosition();
        CCPoint diff = ccpSub(currentPos, m_previousPosition);
        m_startPosition = ccpAdd( m_startPosition, diff);

        CCPoint newPos = ccpAdd( m_startPosition, ccp(x,y));
        m_pTarget->setPosition(newPos);

        m_previousPosition = newPos;
        
        if(m_bRotHead)
        {
            CCPoint dirPoint = ccpSub(newPos, currentPos);
            float fRadian = atanf(dirPoint.y/dirPoint.x);
            
            
            if((dirPoint.y > 0 && dirPoint.x > 0)
               || (dirPoint.y < 0 && dirPoint.x > 0))
            {
                fRadian = M_PI_2 - fRadian;
            }
            else if((dirPoint.y < 0 && dirPoint.x < 0)||
                    (dirPoint.y > 0 && dirPoint.x < 0))
            {
                fRadian = -M_PI_2 - fRadian;
            }
            
            float m_fRotation = fRadian*180.0/M_PI;
            m_pTarget->setRotation(m_fRotation);
        }        
#else
        m_pTarget->setPosition(ccpAdd( m_startPosition, ccp(x,y)));
#endif // !CC_ENABLE_STACKABLE_ACTIONS
    }
}
void CCBezierBy::update(ccTime time)
{
	if (m_pTarget)
	{
		float xa = 0;
		float xb = m_sConfig.controlPoint_1.x;
		float xc = m_sConfig.controlPoint_2.x;
		float xd = m_sConfig.endPosition.x;

		float ya = 0;
		float yb = m_sConfig.controlPoint_1.y;
		float yc = m_sConfig.controlPoint_2.y;
		float yd = m_sConfig.endPosition.y;

		float x = bezierat(xa, xb, xc, xd, time);
		float y = bezierat(ya, yb, yc, yd, time);
		m_pTarget->setPosition(ccpAdd(m_startPosition, ccp(x, y)));
	}
}
Пример #5
0
 cocos2d::CCPoint Bezier::pointAt(float progress){
     const float configIndexF(_configs.size()*progress);
     const int configIndex(configIndexF);
     const float time(configIndexF-configIndex);
     const Bezier::Config & conf(_configs.at(configIndex));
     
     //get the step
     const cocos2d::CCPoint startPos(configIndex==0? _startPosition: _configs.at(configIndex-1).endPos);
     
     const float xa(startPos.x);
     const float xb(conf.controlPt1.x);
     const float xc(conf.controlPt2.x);
     const float xd(conf.endPos.x);
     
     const float ya(startPos.y);
     const float yb(conf.controlPt1.y);
     const float yc(conf.controlPt2.y);
     const float yd(conf.endPos.y);
     
     return {bezierat(xa, xb, xc, xd, time), bezierat(ya, yb, yc, yd, time)};
 }