关闭

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

标签: cocos2d-x
117人阅读 评论(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));

}

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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:16525次
    • 积分:486
    • 等级:
    • 排名:千里之外
    • 原创:34篇
    • 转载:2篇
    • 译文:0篇
    • 评论:0条