游戏中有事会希望精灵按着一些常规的轨迹进行运动,cocos2d-x中的CCCardinalSplineTo和其他子类有实现这样的功能,只需提供几个离散的点,游戏对象就可以根据这些离散开来的点模拟出相应的路径,这些路径就是相应的公式模拟出来的曲线,那就是基本样条。
这里CCCardinalSplineTo和CCCardinalSplineBy的关系与之前以“To”和"By"结尾的类类似,CCCatmullRomTo和CCCatmullRomBy也是这样的。他们都是采用基本样条的公式;不同的是,CCCatmullRomTo和CCCatmullRomBy的拉力系数是0.5,而之前的CCCardinalSplineTo和CCCardinalSplineBy的拉力系数是可以自定义的。
基本样条动作,首先定义一个点数组,把路径的点放入点数组中。创建基本样条动作时,3个参数分别是动作时间、点数组、拉力系数。
和之前一样还是所谓的“To”和“By”的区别,第一个是绝对的,第二个是相对的,第二个定义点数组的时候,第一个点最好设置为(0,0),否则会被忽略掉,可以重写draw函数把路径画出来的。
CCSprite *sprite=CCSprite::create("CloseNormal.png");
sprite->setPosition(CCPointZero);
this->addChild(sprite);
CCPointArray *trackI=CCPointArray::create(10);//定义数组
trackI->addControlPoint(CCPointZero);
trackI->addControlPoint(ccp(400,20));
trackI->addControlPoint(ccp(400,300));
trackI->addControlPoint(ccp(30,300));
trackI->addControlPoint(ccp(200,150));
CCCatmullRomTo *action=CCCatmullRomTo::create(5,trackI);
sprite->runAction(action);