1、CCSkewTo
一种倾斜的动作,关于X或Y轴的倾斜。
CCActionInterval *actionTo = CCSkewTo::create(2, 37.2f, -37.2f);
CCActionInterval *actionBy = CCSkewBy::create(2, 0.0f, -90.0f);
static CCSkewTo* create(float t, float sx, float sy);
2、自定义路线CCCatmullRomTo和CCCatmullRomBy
CCSize s = CCDirector::sharedDirector()->getWinSize();
CCPointArray *array = CCPointArray::create(20);
array->addControlPoint(ccp(0, 0));
array->addControlPoint(ccp(s.width/2-30,0));
array->addControlPoint(ccp(s.width/2-30,s.height-80));
array->addControlPoint(ccp(0, s.height-80));
array->addControlPoint(ccp(0, 0));
//
// sprite 1 (By)
//
// Spline with no tension (tension==0)
//
//其中第三个参数为惯性
CCCatmullRomBy *action = (CCCatmullRomBy*)CCCardinalSplineBy::create(3, array, 0);
CCCatmullRomBy* reverse = (CCCatmullRomBy*)action->reverse();
CCSequence *seq = CCSequence::create(action, reverse, NULL);
m_tamara->setPosition(ccp(50,50));
m_tamara->runAction(seq);
3、贝塞尔曲线CCBezierTo和CCBezierBy,至于不懂贝塞尔曲线绘制方法的同学(其实一开始我也不懂),可以去维基百科搜下,有详细的绘制方法。
例子中的相关代码:
// sprite 1
ccBezierConfig bezier;
bezier.controlPoint_1 = ccp(0, s.height/2);
bezier.controlPoint_2 = ccp(300, -s.height/2);
bezier.endPosition = ccp(300,100);
CCActionInterval* bezierForward = CCBezierBy::create(3, bezier);
CCActionInterval* bezierBack = bezierForward->reverse();
CCAction* rep = CCRepeatForever::create(CCSequence::create( bezierForward, bezierBack, NULL));
// sprite 2
m_tamara->setPosition(ccp(80,160));
ccBezierConfig bezier2;
bezier2.controlPoint_1 = ccp(100, s.height/2);
bezier2.controlPoint_2 = ccp(200, -s.height/2);
bezier2.endPosition = ccp(240,160);
CCActionInterval* bezierTo1 = CCBezierTo::create(2, bezier2);
// sprite 3
m_kathia->setPosition(ccp(400,160));
CCActionInterval* bezierTo2 = CCBezierTo::create(2, bezier2);
m_grossini->runAction( rep);
m_tamara->runAction(bezierTo1);
m_kathia->runAction(bezierTo2);