cocos2d-x 4.0 学习之路(十二)复杂的移动(Bezier贝塞尔曲线)

我们今天来学习一些,比较复杂的运动。

比如想走出平滑的曲线运动,我们可以使用BezierTo和BezierBy。

这个Bezier是贝塞尔曲线,大家可以搜一下基础知识。

ccBezierConfig有3个参数,

Vec2 controlPoint_1 :curve point 1(曲线点1)
Vec2 controlPoint_2 :curve point 2(曲线点2)
Vec2 endPosition :最终位置

这个曲线点1、2都是啥意思呢?看一下百度百科的解释图就明白了。

如果你还想深入明白,这个曲线为什么这么弯曲,那就好好研究一下,贝塞尔曲线的公式计算吧(我是看不明白)

我测试了两种情况,开始和结束坐标都一样,分别是(200, 400), (600, 400)。但两次的曲线点不一样,我们可以看一下效果。

第一次测试代码和效果:

    auto sprite1 = Sprite::create("s1.png");
    sprite1->setPosition(Vec2(200, 400));
    this->addChild(sprite1);    

    ccBezierConfig bz;
    bz.controlPoint_1 = Vec2(300, 500);
    bz.controlPoint_2 = Vec2(500, 300);
    bz.endPosition = Vec2(600, 400);
    auto move = BezierTo::create(3, bz);

扫描二维码关注公众号,回复: 10646805 查看本文章

第二次测试代码和效果:

    auto sprite1 = Sprite::create("s1.png");
    sprite1->setPosition(Vec2(200, 400));
    this->addChild(sprite1);    

    ccBezierConfig bz;
    bz.controlPoint_1 = Vec2(200, 600);
    bz.controlPoint_2 = Vec2(600, 200);
    bz.endPosition = Vec2(600, 400);
    auto move = BezierTo::create(3, bz);

以上是BezierTo,BezierBy的效果又是完全不一样了,因为BezierBy是以精灵当前位置为基准进行移动的。我就不举例了。

发布了104 篇原创文章 · 获赞 8 · 访问量 21万+

猜你喜欢

转载自blog.csdn.net/sunnyboychina/article/details/105268585