cocos2d-x-3.0学习笔记之贝塞尔曲线

贝塞尔曲线(Bézier curve),又称贝兹曲线或贝济埃曲线,是应用于二维图形应用程序的数学曲线。一般的矢量图形软件通过它来精确画出曲线,贝兹曲线由线段与节点组成,节点是可拖动的支点,线段像可伸缩的皮筋,我们在绘图工具上看到的钢笔工具就是来做这种矢量曲线的。
在cocos中,要实现贝塞尔曲线十分简单,因为引擎已经帮我门封装好了。下面就用贝塞尔曲线来做出精灵在固定范围类来回曲线运动的效果

void raise()
{
    if (m_status == FLY_RIGHT)
        m_status = FLY_LEFT;
    else
        m_status = FLY_RIGHT;
    updateItem();
    //运动曲线
    //定义贝塞尔曲线
    //给贝塞尔曲线所需要的峰值设立随机坐标值
    cfg.controlPoint_1 = ccp(CCRANDOM_0_1() * m_offsetH,
        CCRANDOM_0_1() * m_offsetV);
    cfg.controlPoint_2 = ccp(CCRANDOM_0_1() * m_offsetH,
        CCRANDOM_0_1() * m_offsetV);
    cfg.endPosition = ccp(m_offsetH, m_offsetV);
    //创建贝塞尔曲线运动
    BezierBy *raise = BezierBy::create(m_duration, cfg);
      //创建回掉函数,可以看作一个运动,当贝塞尔曲线运动执行完毕之后调用
    auto callBackFunc = [&]()
    {
         //调用贝塞尔曲线返回的的函数
        fall();
    };
    auto action2 = CallFunc::create(callBackFunc);
    runAction(Sequence::createWithTwoActions(raise, action2));
}

void fall()
{
    if (m_status == FLY_RIGHT)
        m_status = FLY_LEFT;
    else
        m_status = FLY_RIGHT;
    updateItem();
    //运动曲线
    ccBezierConfig cfg;
    cfg.controlPoint_1 = ccp(-CCRANDOM_0_1() * m_offsetH,
        -CCRANDOM_0_1() * m_offsetV);
    cfg.controlPoint_2 = ccp(-CCRANDOM_0_1() * m_offsetH,
        -CCRANDOM_0_1() * m_offsetV);
    cfg.endPosition = ccp(-m_offsetH, -m_offsetV);
    BezierBy *fall = BezierBy::create(m_duration, cfg);
    auto callBackFunc = [&]()
    {
        //调用贝塞尔曲线运动的函数
        raise();
    };
    auto action2 = CallFunc::create(callBackFunc);
    runAction(Sequence::createWithTwoActions(fall, action2));

}

这样就简单实现了一个精灵在一个固定的范围内做贝塞尔曲线运动了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值