cocos实现贝塞尔曲线CCBezierTo,物体以弧形轨迹运动
设备/引擎:Mac(11.6)/cocos
开发工具:Xcode(13.0)
开发语言:Objective-c/c++
开发需求:让物体以弧形进行运动
cocos对贝塞尔曲线的定义如下
typedef struct _ccBezierConfig {
//! end position of the bezier
CCPoint endPosition;
//! Bezier control point 1
CCPoint controlPoint_1;
//! Bezier control point 2
CCPoint controlPoint_2;
} ccBezierConfig;
原理也不难,只需要自己确定好初始点位置、终点位置,中间点位置看具体需求,若需要更加均匀舒缓,则将中间两点位置均匀分布在始终点之间,若需要前面运动急促,后面运动舒缓,则将第一个点(controlPoint_1)与始发点离的近一点,第二个点离终点远一些,且三个点的高度无太大差别,依次可以演化更多的运动形式,具体以需求为准。
三个点都需要进行设置,未设置点则元素会直接默认为(0,0),简单测试一下就可以明白。
以下为我设置的参数
flybird->setPosition(ccp(500,600)); //初始点
ccBezierConfig bezier; //实例化
bezier.controlPoint_1 = ccp(700, 530); //第一个点
bezier.controlPoint_2 = ccp(900, 530); //第二个点
bezier.endPosition = ccp(1200, 600); //终点
之后就可以调用CCBezierTo来控制运动的速度,当然,如果想要控制运动过程中的角度,可以继续调用CCRotateTo/CCRotateBy来控制元素的运动角度。
部分代码如下
flybird->runAction(CCSpawn::create(CCBezierTo::create(4.0,bezier),
CCRotateTo::create(3.5, -50),
NULL));
贝塞尔曲线原理其实不难,还有疑问的可以在代码中设置一下,看看效果,多改改值就可以明白每部分的意思。
希望能给大家带来帮助!!!